#python #pandas
#python #pandas
Вопрос:
Я написал функцию для удаления хэштегов из твитов в наборе данных Twitter. Я пытаюсь запустить его в твитах в фрейме данных pandas, используя функцию map. Но я продолжаю получать эту ошибку: «Ошибка типа: ожидаемая строка или байтоподобный объект»
Я погуглил сообщение об ошибке и рассмотрел здесь немало похожих проблем, но пока ничего не сработало. Нужно ли преобразовывать объект tweet в другой тип?
def remove_hashtags(tweet):
no_hashtags = []
if len(re.findall("(#[^#s] )", tweet)) > 0:
tweet = re.sub("(#[^#s] )", "", tweet)
no_hashtags.append(tweet)
return no_hashtags[0]
text_all_removed = text_no_links.map(remove_hashtags)
TypeError Traceback (most recent call last)
<ipython-input-143-84c94835f61a> in <module>
----> 1 text_all_removed = text_no_links.map(remove_hashtags)
~/venv/lib/python3.6/site-packages/pandas/core/series.py in map(self, arg, na_action)
3380 """
3381 new_values = super(Series, self)._map_values(
-> 3382 arg, na_action=na_action)
3383 return self._constructor(new_values,
3384 index=self.index).__finalize__(self)
~/venv/lib/python3.6/site-packages/pandas/core/base.py in _map_values(self, mapper, na_action)
1216
1217 # mapper is a function
-> 1218 new_values = map_f(values, mapper)
1219
1220 return new_values
pandas/_libs/lib.pyx in pandas._libs.lib.map_infer()
<ipython-input-142-5e6df146cb08> in remove_hashtags(tweet)
3 def remove_hashtags(tweet):
4 no_hashtags = []
----> 5 if len(re.findall("(#[^#s] )", tweet)) > 0:
6 tweet = re.sub("(#[^#s] )", "", tweet)
7 no_hashtags.append(tweet)
~/venv/lib64/python3.6/re.py in findall(pattern, string, flags)
220
221 Empty matches are included in the result."""
--> 222 return _compile(pattern, flags).findall(string)
223
224 def finditer(pattern, string, flags=0):
TypeError: expected string or bytes-like object
вывод text_no_links.head()
0 [ #bbcqt Remoaners on about post Brexit racial...
1 [@sarahwollaston Shut up, you like all remoane...
2 [ what have the Brextremists ever done for us ...
3 [ Remoaner in bizarre outburst ]
4 [ Anyone who disagrees with brexit is called n...
Name: text, dtype: object
Комментарии:
1. Эта ошибка сообщает вам, что tweet не является строкой. Возможно, попробуйте type(text_no_links) и посмотрите, какой тип объекта вы на самом деле отправляете в функцию. Попробуйте это и сообщите нам, каков результат.
2. хорошо — он отображается как pandas.core.series. Серия — нужно ли мне преобразовать это в строку?
3. Имеет смысл, что это серия, карта должна применяться к каждому элементу в серии. выведите (text_no_links), чтобы увидеть, действительно ли содержимое вашей серии является строками. Затем попробуйте ввести(text_no_links[0]), чтобы увидеть тип объекта, к которому относится ваш фактический элемент. Это должна быть строка.
4. хм, это список
5. если вы можете опубликовать вывод text_no_links.head() в качестве обновления вашего вопроса, это поможет.