0

我有一个具有 JSON 结构的文本文件,我想将其转换为数据框。

JSON 文件包括几个这样的 JSON 字符串:

{'cap': {'english': 0.1000, 'universal': 0.225}, 'display_scores': {'english': {'astroturf': 0.5, 'fake_follower': 0.8, 'financial': 0.2, 'other' :1.8,“整体”:1.8,“self_declared”:0.0,“垃圾邮件发送者”:0.2},“通用”:{“astroturf”:0.4,“fake_follower”:0.2,“财务”:0.2,“其他”:0.4 , '整体': 0.8, 'self_declared': 0.0, 'spammer': 0.0}}, 'raw_scores': {'english': {'astroturf': 0.1, 'fake_follower': 0.16, '财务': 0.05, '其他':0.35,'整体':0.35,'self_declared':0.0,'垃圾邮件发送者':0.04},'通用':{'astroturf':0.07,'fake_follower':0.03,'财务':0.05,'其他':0.09,'整体':0.16,'self_declared':0.0,'垃圾邮件发送者':0.01}},'用户':{'majority_lang':'de','user_data':{'id_str':'123456' , 'screen_name': 'beispiel01'}}}

tweets_data_path = "data.txt"
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_data

df = pd.DataFrame.from_dict(pd.json_normalize(tweets_data), orient='columns')
df

但是,显然 json.loads 或 append 命令有问题,因为当我调用它时, tweets_data 是空的。

你有想法吗?

4

2 回答 2

0

这就是您的代码应该如何将数据附加到tweets_data.

import json
tweets_data_path = "data.txt"
tweets_data = []

with open(tweets_data_path, 'r') as f:
    for line in f.readlines():
        try:
            tweet = json.loads(json.dumps(line))
            tweets_data.append(tweet)
        except:
            continue
            

print(tweets_data)
["{'cap': {'english': 0.1000, 'universal': 0.225}, 'display_scores': {'english': {'astroturf': 0.5, 'fake_follower': 0.8, 'financial': 0.2, 'other': 1.8, 'overall': 1.8, 'self_declared': 0.0, 'spammer': 0.2}, 'universal': {'astroturf': 0.4, 'fake_follower': 0.2, 'financial': 0.2, 'other': 0.4, 'overall': 0.8, 'self_declared': 0.0, 'spammer': 0.0}}, 'raw_scores': {'english': {'astroturf': 0.1, 'fake_follower': 0.16, 'financial': 0.05, 'other': 0.35, 'overall': 0.35, 'self_declared': 0.0, 'spammer': 0.04}, 'universal': {'astroturf': 0.07, 'fake_follower': 0.03, 'financial': 0.05, 'other': 0.09, 'overall': 0.16, 'self_declared': 0.0, 'spammer': 0.01}}, 'user': {'majority_lang': 'de', 'user_data': {'id_str': '123456', 'screen_name': 'beispiel01'}}}\n", "{'cap': {'english': 0.1000, 'universal': 0.225}, 'display_scores': {'english': {'astroturf': 0.5, 'fake_follower': 0.8, 'financial': 0.2, 'other': 1.8, 'overall': 1.8, 'self_declared': 0.0, 'spammer': 0.2}, 'universal': {'astroturf': 0.4, 'fake_follower': 0.2, 'financial': 0.2, 'other': 0.4, 'overall': 0.8, 'self_declared': 0.0, 'spammer': 0.0}}, 'raw_scores': {'english': {'astroturf': 0.1, 'fake_follower': 0.16, 'financial': 0.05, 'other': 0.35, 'overall': 0.35, 'self_declared': 0.0, 'spammer': 0.04}, 'universal': {'astroturf': 0.07, 'fake_follower': 0.03, 'financial': 0.05, 'other': 0.09, 'overall': 0.16, 'self_declared': 0.0, 'spammer': 0.01}}, 'user': {'majority_lang': 'de', 'user_data': {'id_str': '123456', 'screen_name': 'beispiel01'}}}"]
于 2021-08-26T09:15:18.343 回答
0

无需将 JSON 加载到字典中,然后将该字典转换为 pandas 数据帧,只需使用 pandas 内置函数将 JSON 转换为 pandas 数据帧

df = pd.read_json(tweets_file)

或者,如果您希望将 JSON 加载到字典中,则将字典转换为数据框:

tweets_data = json.loads(tweets_file.read())
df = pd.DataFrame.from_dict(tweets_data, orient='columns')
于 2021-08-26T08:51:55.810 回答