Данные Twitter и python — ошибка типа: ожидаемая строка или байтоподобный объект

#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() в качестве обновления вашего вопроса, это поможет.