Python - 将值传递到 Dataframe 时出现问题

标签 python twitter pandas

我正在尝试访问从 Twitter 获得的 json 中的“国家/地区”值。我使用 straming API 获取一些推文并将它们保存到文件中。

import json
import pandas as pd
import matplotlib.pyplot as plt

tweets_data_path = 'E:/Python_prog/twitter_data.json'
tweets_data = []
tweets_file = open(tweets_data_path, "r")

for line in tweets_file:
    try:

        tweets_data.append(json.loads(line))

    except:
        pass

这就是我访问数据的方式。

将“text”和“lang”传递到数据帧中没有问题。

tweets = pd.DataFrame()

tweets['text'] = [tweet['text'] for tweet in tweets_data]
tweets['lang'] = [tweet['lang'] for tweet in tweets_data]

我知道“地方”可以为空,所以我尝试了以下方法:

for tweet in tweets_data:
    if tweet['place'] is not None:
        print(tweet['place']['country'])
        tweets['country'] = tweet['place']['country']

我使用 print 来检查我是否获得了正确的值并且有效。 我得到这个输出:

United States
United States
United States
United States
United States
United States
Malaysia
United States
United States
United States
United States

但它不会传递到 tweets['country'] Dataframe 中。 我正在使用

检查数据框

print(tweets['country'])

这就是我的输出:

0      United States
1      United States
2      United States
3      United States
4      United States
5      United States
6      United States
7      United States
8      United States
9      United States
.. 
302    United States
303    United States

我认为它会变成 303,因为我的文件中有 304 条推文。 我的问题是将值正确传递到数据帧中,但不确定如何传递。 稍后我将使用这些 Dataframes 用 matplotlib 制作表格。

编辑: 根据要求,我使用了 json 文件的示例: 编辑2: 自从我得到答案后删除了 json 示例。谢谢。

最佳答案

这个问题基本上是因为您分配给数据框而发生的,例如 -

tweets['country'] = tweet['place']['country']

您试图为整个系列分配一个值,因此它会完全覆盖该值的所有值。示例-

In [3]: df = pd.DataFrame([[1,2],[3,4]],columns = ['A','B'])

In [4]: df
Out[4]:
   A  B
0  1  2
1  3  4

In [5]: df['C'] = 2

In [6]: df
Out[6]:
   A  B  C
0  1  2  2
1  3  4  2

我建议您将 DataFrame 创建为 -

tweet_list = [[tweet['text'], tweet['lang'], tweet.get('place','<some default dict with country key>')['country']] for tweet in tweets_data]

tweets = pd.DataFrame(tweet_list, columns=['text','lang','country'])

您需要为没有国家/地区的推文提供一些默认值,您可以在那里提供一个空字符串。 dict.get(key) ,如果没有找到 key,没有第二个参数默认返回 None。

关于Python - 将值传递到 Dataframe 时出现问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32374592/

相关文章:

python - 修改函数内的 numpy 数组?

python - Django - 自定义装饰器 - 参数未填充

ruby-on-rails - 使用 Ruby on Rails 实例化多个 Twitter 帐户 twitter gem

Python->数据框->扩展数据框

python - 如何使用预测模型 python 预测列中的特定行?

python - Pandas 在读取 CSV 时重命名列

python - dictsort 模板过滤器和两列过滤

python - 如何在 Python Django 中运行单元测试时禁用日志记录?

javascript - 为什么 axios 在解析 twitter 搜索 api 响应后以某种方式修改推文的 id?

Android Twitter Fabric SDK 与支持库冲突