如何将JSON文件导入Pandas Dataframe

时间:2019-02-03 21:47:08

标签: python json pandas dataframe

我一直在设法将数据加载到Pandas中的几种不同方法。如果有人对这些例外有任何建议,将不胜感激!在尝试使用不同方法的某些示例中,文件名在tweet_json.txt和tweet_json.json之间更改。

with open('tweet_json.json', 'r') as f:
    data = json.load(f)
df_3 = pd.DataFrame(data)

结果:JSONDecodeError: Extra data: line 2 column 1 (char 3974)

df_3 = pd.read_json('tweet_json.json', lines = True)

结果:ValueError: Unexpected character found when decoding object value

with open('tweet_json.txt') as file:
    status = []
    for line in file:
        data = json.loads(line)
df_3 = pd.Dataframe(data)

结果:JSONDecodeError: Expecting ',' delimiter: line 1 column 1626 (char 1625)

我唯一获得远程成功的唯一方法是使用json.dumps(),但这只是将其加载到没有任何解析的单列数据框中,而且json看起来像一个多级字典,我不知道如何去分离它:

data = []
with open('tweet_json.json') as f:    
    for line in f:         
         data.append(json.dumps(line))
df_3 = pd.DataFrame(data)  

2 个答案:

答案 0 :(得分:1)

您可以使用json_normalizeread_json将json文件读入数据框。

如果您具有嵌套的json结构,则还可以使用from_records函数

答案 1 :(得分:0)

这就是我解决问题的方法。我没有定义要导入和使用地图的列。我仍然不知道如何将整个JSON导入df,但这确实满足了我的需要。

tweets_data = []
tweet_file = open('tweet_json.txt', "r")
for line in tweet_file:
    try:
        tweet = json.loads(line)
        tweets_data.append(tweet)
    except:
        continue   
tweet_file.close()
tweet_info = pd.DataFrame()
tweet_info['id'] = list(map(lambda tweet: tweet['id'], tweets_data))
tweet_info['retweet_count'] = list(map(lambda tweet: tweet['retweet_count'], tweets_data))
tweet_info['favorite_count'] = list(map(lambda tweet: tweet['favorite_count'], tweets_data))