我试图将一个大型JSON文件转换为CSV,但是我需要能够在电子表格中对数据进行排序的字段都在一个单元格中,每当我将其转换为CSV/Normalize JSON时。我需要的主要是字典的hits
列表,当我将其转换为csv时,不是所有的都在同一个单元格中。(结构是:一个字典的字典,其中包含一个字典的列表)
下面是JSON的示例:https://pastebin.com/VA5mfhfB
我是这样做的(并给出了一些输出):
df = pd.json_normalize(boss_dictionary)
df.to_csv(r'data.csv', index=None)
我试着把record_path
参数,但因为没有一个"统一";boss_id(之前的数字),我不知道如何规范化hits
列表的字典。
我尝试过的另一件事:
df = pd.read_json('data.json')
df.to_csv(r'data.csv', index=None)
所做的与我需要的相似,但不是我实际需要的。命中列表只是在一个单元格中,而不是被标准化。
我已经尝试修复它:
我已经尝试用字典本身规范化它,并从JSON中读取它。我已经阅读了关于json_normalize
的文档,但是meta
或record_path
的参数没有给我任何不引发异常的结果。
在基于键的列表中使用json_normalize with。最终合并并爆炸
from ast import literal_eval
import pandas as pd
data = literal_eval(open("/path/to/file/data.txt").read())
df_meta = (
pd
.concat([pd.json_normalize(data=data[x]) for x in data], keys=data.keys())
.droplevel(level=1)
.reset_index(names="id")
)
df_records = (
pd
.concat([pd.json_normalize(data=data[x], record_path=["hits"]) for x in data], keys=data.keys())
.droplevel(level=1)
.reset_index(names="id")
)
df_final = pd.merge(left=df_meta, right=df_records).drop(columns="hits")
df_final = df_final.explode("hp_list").reset_index(drop=True)