【发布时间】:2017-08-27 17:56:16
【问题描述】:
我正在使用本教程中给出的代码: http://adilmoujahid.com/posts/2014/07/twitter-analytics/
目的是使用 Twitter Streaming API 收集数据,以 JSON 格式存储数据,然后从这些数据中获取推文。在教程的第二步,它使用以下代码来获取推文:
tweets_data = []
tweets_file = open(tweets_data_path, "r")
for line in tweets_file:
try:
tweet = json.loads(line)
tweets_data.append(tweet)
except:
continue
tweets = pd.DataFrame()
tweets['text'] = map(lambda tweet: tweet['text'], tweets_data[0:2377])
我在 DataFrame 推文中使用了 tweets_data 的子集。但是,在 tweets_data 的索引 2376 处,它没有包含有关推文及其文本的数据,而是:
{u'limit': {u'track': 4, u'timestamp_ms': u'1491153253907'}
因此,使用 tweets_data[0:2377] 返回 KeyError: 'text'。索引 2376 处的字典元素不像其他元素那样具有 u'text';使用索引 2376 以下的任何子集都可以。但是,我不能只跳过 2376,因为我的 JSON 数据中有更多类似的元素。使用 tweets_data[0:2377] + tweets_data[2377:len(tweets_data)] 也会返回 KeyError: 'text'。
那么元素 2376 发生了什么?在数据框中创建“文本”列之前,我应该只过滤掉没有 u'text' 的元素吗?还是有更好的办法?
【问题讨论】:
标签: python json pandas twitter twitter-streaming-api