почему я получаю ошибку при попытке использовать регулярные выражения? - PullRequest
0 голосов
/ 07 июня 2019

используя re.sub () для строковых объектов, я получаю TypeError: ожидаемую строку или байтовоподобный объект.

Я пытаюсь очистить кучу твитов, которые я скачал и сохранил в csvфайл.CSV-файл содержит только два столбца: столбец «Нет», который показывает номер каждого твита, и «тело».Я использую re.sub (), чтобы удалить все «упоминания» из тела твитов.Но команда возвращает ошибку.ниже мой код и ошибка:

# Convert to list
data = df.content.values.tolist()

# Remove mentions
data = [type(sent) for sent in data[:10]]
print(data)
data = [re.sub('\S*@\S*\s?', '', sent) for sent in data[:10]]
[<class 'str'>, <class 'str'>, <class 'str'>, <class 'str'>, <class 'str'>, <class 'str'>, <class 'str'>, <class 'str'>, <class 'str'>, <class 'str'>]

Как вы можете видеть выше, я дважды проверил и убедился, что вход в команду regex является строкой.Однако, ошибка, которую я получаю, говорит иначе


TypeError                                 Traceback (most recent call last)
<ipython-input-11-bd1250ebb94b> in <module>
      6 data = [type(sent) for sent in data[:10]]
      7 print(data)
----> 8 data = [re.sub('\S*@\S*\s?', '', sent) for sent in data[:10]]
      9 

<ipython-input-11-bd1250ebb94b> in <listcomp>(.0)
      6 data = [type(sent) for sent in data[:10]]
      7 print(data)
----> 8 data = [re.sub('\S*@\S*\s?', '', sent) for sent in data[:10]]
      9 

~\Anaconda3\lib\re.py in sub(pattern, repl, string, count, flags)
    190     a callable, it's passed the Match object and must return
    191     a replacement string to be used."""
--> 192     return _compile(pattern, flags).sub(repl, string, count)
    193 
    194 def subn(pattern, repl, string, count=0, flags=0):

TypeError: expected string or bytes-like object

Ответы [ 2 ]

1 голос
/ 07 июня 2019

Можно использовать type, чтобы проверить, что ваши значения являются строками, но, переназначая результат обратно на data, вы выполняете подстановку регулярных выражений для типов, когда хотите применить ее к самим строкам.

В любом случае, вместо использования re, вы можете использовать встроенные функции pandas:

df['content'].str.replace(r'\s+', ' ')
0 голосов
/ 07 июня 2019

На самом деле типы имеют тип "type", а не "str".

Вы можете легко получить имя типа, выполнив:

data = [type(sent).__name__ for sent in data[:10]]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...