Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/339.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 快速删除dataframe列中的标点符号和特殊字符的方法_Python_Regex_Pandas - Fatal编程技术网

Python 快速删除dataframe列中的标点符号和特殊字符的方法

Python 快速删除dataframe列中的标点符号和特殊字符的方法,python,regex,pandas,Python,Regex,Pandas,我正在使用下面的代码从数据框中的列中删除特殊字符和标点符号。但是这种使用regex.sub的方法并不高效。有没有其他的选择,我可以尝试有更好的时间效率和删除标点符号和特殊字符?或者我删除特殊字符并将其解析回列的方式,pandas dataframe会导致我大量的计算消耗 for n, string in data['text'].iteritems(): data['text'] = re.sub('([{string.punctuation}“”¨«»®´·º½¾¿¡§£₤‘’])','

我正在使用下面的代码从数据框中的列中删除特殊字符和标点符号。但是这种使用regex.sub的方法并不高效。有没有其他的选择,我可以尝试有更好的时间效率和删除标点符号和特殊字符?或者我删除特殊字符并将其解析回列的方式,pandas dataframe会导致我大量的计算消耗

for n, string in data['text'].iteritems():
   data['text'] = re.sub('([{string.punctuation}“”¨«»®´·º½¾¿¡§£₤‘’])','', string)

一种方法是只保留字母数字。考虑这个数据框

df=pd.DataFrame({'Text':['#^#346fetvx@!.,;:', 'fhfgd54@!#><?']})

    Text
0   #^#346fetvx@!.,;:
1   fhfgd54@!#><?

使用正则表达式和lambda函数:

import re
data['PROD_NAME'] = data['PROD_NAME'].apply(lambda x: re.sub('[^A-Za-z0-9]', ' ', x))

这将删除除字母和数字以外的所有字符。

为什么不在将数据放入数据框之前将其上游修复?如果要删除所有非字母数字的字符,只需使用
re.sub('[\W\u]','',string)
什么是
数据
?无论您在这里做什么都没有多大意义,您只是覆盖了
数据['text']
中的任何内容,但您的代码只是在
数据['text']
中创建了一列,其中填充了一个字符串,最后一条会形成你的循环…@RajeshThevar我的评论基本上是问你为什么要存储需要修复的文本?为什么不在将文本存储到数据框之前修复它呢?这很有效。非常感谢。添加一个子评论,我也使用了它。在for循环中,我使用testing_['comment_text']=testing_['comment_text'].map(lambda值:re.sub('[\W_]','',value)),很高兴它能工作。我不太清楚循环的目的,我的思想过程只是让dataframe列具有清理过的字符串、删除的标点符号和特殊字符。使用相同的数据在相同的行上覆盖,但不使用干净的字符串。现在回想起来,这是一个主要的性能问题。是的,使用\w+提取字母数字值正是这样做的。如果要使用replace,可以尝试使用df['Text']=df['Text'].str.replace('\W+','')达到相同的效果
import re
data['PROD_NAME'] = data['PROD_NAME'].apply(lambda x: re.sub('[^A-Za-z0-9]', ' ', x))