Python 快速删除dataframe列中的标点符号和特殊字符的方法
我正在使用下面的代码从数据框中的列中删除特殊字符和标点符号。但是这种使用regex.sub的方法并不高效。有没有其他的选择,我可以尝试有更好的时间效率和删除标点符号和特殊字符?或者我删除特殊字符并将其解析回列的方式,pandas 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}“”¨«»®´·º½¾¿¡§£₤‘’])','
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))