str.translate()方法对熊猫系列给出错误

时间:2018-10-10 12:40:56

标签: python pandas dataframe

我有3列的DataFrame。我希望使用的两列是Dog_SummaryDog_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, ' '))

但是,它仍然不起作用!

谁能给我建议或意见

谢谢! :)

1 个答案:

答案 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访问器)。