Метод str.translate () выдает ошибку в серии Pandas - PullRequest
0 голосов
/ 10 октября 2018

У меня есть DataFrame из 3 столбцов.Вот два столбца, которыми я хочу манипулировать: 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, ' '))

Однако, он все еще не работает!

Может кто-нибудь дать мне предложения или совет

Спасибо!:)

1 Ответ

0 голосов
/ 10 октября 2018

Я хочу удалить любые знаки препинания, которые у него могут быть.

Вы можете использовать регулярное выражение и 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-строки и класс символов , чтобы перехватить любой из знаков пунктуации:

>>> 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 accessor).

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...