Извлечение хештегов из сущностей и добавление их в новый столбец - PullRequest
0 голосов
/ 19 сентября 2019

Я создал следующий фрейм данных из файла твитов json.

tweets['text'] =    list(map(lambda tweet: tweet['text'], tweets_data))
tweets['date'] =    list(map(lambda tweet: tweet['created_at'], tweets_data))
tweets['lang'] =    list(map(lambda tweet: tweet['lang'], tweets_data))
tweets['place_type'] = list(map(lambda tweet: tweet['place']['place_type'] if tweet['place'] != None else None, tweets_data))
tweets['place_name'] = list(map(lambda tweet: tweet['place']['full_name'] if tweet['place'] != None else None, tweets_data))
tweets['country'] = list(map(lambda tweet: tweet['place']['country'] if tweet['place'] != None else None, tweets_data))
tweets['hashtags'] =  list(map(lambda tweet: tweet['entities']['hashtags'], tweets_data))

Текущий вывод столбца хэштегов следующий:

"[{'text': 'NOJUSTICE', 'indices': [62, 72]}, {'text': 'TrumpPence', 'indices': [93, 104]}]"

Я пытаюсь создатьновый столбец, который содержит только хэштеги.Например:

NOJUSTICE and Trumpence

Я попробовал следующий код:

ht=[]
for s in range(len(tweets['hashtags'])):
    hasht=[]
    for t in range(len(tweets.hashtags[s])):
        hasht.append(tweets['hashtags'][s][t]['text'])
        t=t+1
    ht.append(hasht)
    s=s+1
tweets['HT']=zip(ht)

и получил следующую ошибку:

TypeError                                 Traceback (most recent call last)
<ipython-input-38-9780008354d7> in <module>
      3     hasht=[]
      4     for t in range(len(tweets.hashtags[s])):
----> 5         hasht.append(tweets['hashtags'][s][t]['text'])
      6         t=t+1
      7     ht.append(hasht)

TypeError: string indices must be integers

образец CSV-файла

я хочу, чтобы столбец хэштегов содержал только хэштеги без индексов и прочего

ОБНОВЛЕНИЕ: я использовал следующее предложение и получил ту же ошибку

tweets['hashtags'].apply(lambda x: [d['text'] for d in x])

1 Ответ

0 голосов
/ 19 сентября 2019

Вы можете использовать pandas.Series.apply для анализа хэш-тега следующим образом:

tweets['hashtags'].apply(lambda x: [d['text'] for d in x])

Затем вам нужно сохранить выходные данные в новом столбце кадра данных.Эта анонимная функция принимает значение в качестве входных данных и выполняет итерацию по каждому словарю в списке (если он не пустой), а затем создает новый список значений в ключе: 'text'.Вывод будет выглядеть так:

0                                                  []
1                             [NOJUSTICE, TrumpPence]
2                                                  []
3                                                  []
4                          [CNN, newday, Trump, ISIS]
5                                        [NeverTrump]
6    [Trump2016, TrumpPence16, MakeAmericaGreatAgain]
7                                                  []
8                                                  []
9                                                  []
dtype: object
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...