我正在使用包含不同数据点列表的JSON文件。每个条目具有以下结构,其中流派和评论的数量可以相差很大:
{
"title": "Golf Simulator",
"genres": ["Sports", "Golf"],
"score": 85,
"critic_reviews": [
{ "review_critic": "XYZ", "review_score": 90 },
{ "review_critic": "ABC", "review_score": 90 },
{ "review_critic": "123", "review_score": 90 },
],
"url": "http://example.com/golf-simulator"
},
如果我只是将JSON文件转换为python列表并将其读入数据框,则结果如下所示:
如您所见,问题在于嵌套元素没有以非常有效的方式处理。现在,我不确定自己最好的处理数据的方法是什么,因为正如我提到的那样,类型和评论的数量确实有所不同。
也许有人使用过类似的东西,并且可以分享一些有关如何处理此问题的提示。
编辑:
正如我提到的,我不确定最佳实现是什么-我的猜测是,一个解决方案可能是像这样的嵌套列:
title genres critic_reviews
0 1 0
review_critic review_score
Golf Simulator Sports Golf XYZ 90
答案 0 :(得分:2)
不是Pandas解决方案,而是我仍然建议的解决方案:我将改用(内存中的)数据库以及相关表:
(“ fk”指示符是外键,用于链接不同的表。)
将操作应用于表会比较麻烦(尽管使用适当的SQL不会太多),但是查询(例如,列出所有游戏的单个最高评价得分为65的游戏)可能要容易得多
答案 1 :(得分:0)
您可以尝试flatten_json
:
from flatten_json import flatten
import pandas as pd
data= [ {
"title": "Golf Simulator",
"genres": ["Sports", "Individual", "Golf","Arcade"],
"score": 85,
"critic_reviews": [
{ "review_critic": "XYZ", "review_score": 90 },
{ "review_critic": "ABC", "review_score": 90 },
{ "review_critic": "123", "review_score": 90 },
],
"url": "http://example.com/golf-simulator"
}]
dict_flattened = (flatten(record, '.') for record in data)
df = pd.DataFrame(dict_flattened)
df
输出应为:-
title genres.0 genres.1 genres.2 genres.3 score critic_reviews.0.review_critic critic_reviews.0.review_score critic_reviews.1.review_critic critic_reviews.1.review_score critic_reviews.2.review_critic critic_reviews.2.review_score url
Golf Simulator Sports Individual Golf Arcade 85 XYZ 90 ABC 90 123 90 http://example.com/golf-simulator