我有3列的DataFrame。我希望使用的两列是Dog_Summary
和Dog_Description
。这些列是字符串,我希望删除它们可能包含的所有标点符号。
我尝试了以下方法:
df[['Dog_Summary', 'Dog_Description']] = df[['Dog_Summary', 'Dog_Description']].apply(lambda x: x.str.translate(None, string.punctuation))
对于上述情况,我会收到一条错误消息:
ValueError: ('deletechars is not a valid argument for str.translate in python 3. You should simply specify character deletions in the table argument', 'occurred at index Summary')
我尝试的第二种方法是:
df[['Dog_Summary', 'Dog_Description']] = df[['Dog_Summary', 'Dog_Description']].apply(lambda x: x.replace(string.punctuation, ' '))
但是,它仍然不起作用!
谁能给我建议或意见
谢谢! :)
答案 0 :(得分:1)
我希望删除它可能包含的所有标点符号。
您可以为此使用正则表达式和string.punctuation
>>> import pandas as pd
>>> from string import punctuation
>>> s = pd.Series(['abcd$*%&efg', ' xyz@)$(@rst'])
>>> s.str.replace(rf'[{punctuation}]', '')
0 abcdefg
1 xyzrst
dtype: object
.str.replace()
的第一个参数可以是正则表达式。在这种情况下,您可以使用f字符串和character class来捕获任何标点符号:
>>> rf'[{punctuation}]'
'[!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~]' # ' and \ are escaped
如果要将其应用于DataFrame,只需遵循您现在正在做的事情即可:
df.loc[:, cols] = df[cols].apply(lambda s: s.str.replace(rf'[{punctuation}]', ''))
或者,您可以使用s.replace(rf'[{punctuation}]', '', regex=True)
(没有.str
访问器)。