我从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))
hashtags列的当前输出如下:
"[{'text': 'NOJUSTICE', 'indices': [62, 72]}, {'text': 'TrumpPence', 'indices': [93, 104]}]"
我正在尝试创建一个仅包含主题标签的新列。例如:
NOJUSTICE和Trumpnce
我尝试了以下代码:
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
我希望主题标签列仅包含主题标签,而不包含索引和其他内容
更新:我使用了以下建议,并得到了相同的错误
tweets['hashtags'].apply(lambda x: [d['text'] for d in x])
答案 0 :(得分:0)
您可以使用pandas.Series.apply来解析主题标签,如下所示:
tweets['hashtags'].apply(lambda x: [d['text'] for d in x])
然后,您需要将输出存储在数据框的新列中。此匿名函数将值作为输入,并遍历列表中的每个字典(如果非空),然后在键:“文本”中创建值的新列表。输出如下:
0 []
1 [NOJUSTICE, TrumpPence]
2 []
3 []
4 [CNN, newday, Trump, ISIS]
5 [NeverTrump]
6 [Trump2016, TrumpPence16, MakeAmericaGreatAgain]
7 []
8 []
9 []
dtype: object