[英]Convert Nested JSON to CSV using Pandas
我正在尝试使用 Pandas 将嵌套的 JSON 转换为 CSV。 我看过这里提出的类似问题,但我似乎无法应用于我的场景。 我的 JSON 如下
{
"51% FIFTY ONE PERCENT(PWD)" : {
"ID" : "51%1574233975114-WEBAD",
"contactName" : "",
"createdAt" : 1574233975,
"debit" : 118268.19999999995,
"defaultCompany" : "",
"emailAddress" : "",
"lastUpdatedAt" : "",
"phoneNumber" : "",
"taskNumber" : 0
},
"51% STORE (MUZ)" : {
"ID" : "51%1576650784631-WEBAD",
"contactName" : "",
"createdAt" : 1576650784,
"debit" : 63860,
"defaultCompany" : "",
"emailAddress" : "",
"lastUpdatedAt" : "",
"phoneNumber" : "",
"taskNumber" : 0
},
"ABBOTT S" : {
"STORE (ABD)" : {
"ID" : "ABB1574833257715-WEBAD",
"contactName" : "",
"createdAt" : 1574833257,
"debit" : 35065,
"defaultCompany" : "",
"emailAddress" : "",
"lastUpdatedAt" : "",
"phoneNumber" : "",
"taskNumber" : 0
}
}
}
这是 JSON 的一个片段,正如您所看到的,有些条目(并非全部)是嵌套的。 我尝试使用 json_normalize 以下方式即
import json
from pandas.io.json import json_normalize
with open('.\Customers\kontrolkotlin-CUSTOMERS-export.json') as f:
d = json.load(f)
nycphil = json_normalize(data = d)
nycphil
我敢肯定有一个更简单的说法,但是......
如果您假设嵌套 JSON 的叶子都具有相同的字段( ID
、 contactName
等...),那么您可以递归地展平您的 JSON 并创建一个记录列表,保留将您带到叶子的路径。
就像是:
def flatten_json(x, path="", result=None):
if result is None:
result=[]
if "ID" in x:
result.append({**x, "path": path})
return
for key in x:
flatten_json(x[key], path + "/" + key, result)
return result
df = pd.DataFrame(flatten_json(data))
print(df)
结果:
ID contactName createdAt debit defaultCompany \
0 51%1574233975114-WEBAD 1574233975 118268.2
1 51%1576650784631-WEBAD 1576650784 63860.0
2 ABB1574833257715-WEBAD 1574833257 35065.0
emailAddress lastUpdatedAt phoneNumber taskNumber \
0 0
1 0
2 0
path
0 /51% FIFTY ONE PERCENT(PWD)
1 /51% STORE (MUZ)
2 /ABBOTT S/STORE (ABD)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.