[英]Pandas normalize API call json
我试图为每一列标准化这个 json API 但我做不到。 我从这里尝试了几个关于这个主题的回复,但我找不到我的问题。 问题是因为有些情况下没有EMAIL
这是 json 数据:
data =[{'ID': '11348',
'NAME': 'Yanara',
'LAST_NAME': 'Araneda',
'LEAD_ID': '17772',
'EMAIL': [{'ID': '42400',
'VALUE_TYPE': 'WORK',
'VALUE': 'yanara.araneda.moraga@gmail.com',
'TYPE_ID': 'EMAIL'}]},
{'ID': '11346',
'NAME': 'Carlos ',
'LAST_NAME': 'Gonzalez ',
'LEAD_ID': '17782',
'EMAIL': [{'ID': '42390',
'VALUE_TYPE': 'WORK',
'VALUE': 'cmgclima@gmail.com',
'TYPE_ID': 'EMAIL'}]},
{'ID': '11344',
'NAME': 'Alcides',
'LAST_NAME': 'Gonzalez',
'LEAD_ID': '11006',
'EMAIL': [{'ID': '42376',
'VALUE_TYPE': 'WORK',
'VALUE': 'makogonzalez@gmail.com',
'TYPE_ID': 'EMAIL'}]}
{'ID': '9752',
'NAME': 'Oriana',
'LAST_NAME': 'Mejias',
'LEAD_ID': None}]]
我努力了
df = pd.json_normalize(data)
但是 output 是:
ID NAME LAST_NAME LEAD_ID EMAIL
0 11348 Yanara Araneda 17772 {'ID': '42400', 'VALUE_TYPE': 'WORK', 'VALUE':...
1 11346 Carlos Gonzalez 17782 {'ID': '42390', 'VALUE_TYPE': 'WORK', 'VALUE':...
2 11344 Alcides Gonzalez 11006 {'ID': '42376', 'VALUE_TYPE': 'WORK', 'VALUE':...
谢谢
不清楚您想要的 output 是什么,但这可能有帮助吗?
>>> pd.json_normalize(data, 'EMAIL', ['NAME','LAST_NAME','LEAD_ID'])
ID VALUE_TYPE VALUE TYPE_ID NAME LAST_NAME LEAD_ID
0 42400 WORK yanara.araneda.moraga@gmail.com EMAIL Yanara Araneda 17772
1 42390 WORK cmgclima@gmail.com EMAIL Carlos Gonzalez 17782
2 42376 WORK makogonzalez@gmail.com EMAIL Alcides Gonzalez 11006
问题是您'EMAIL'
字段有一个嵌套列表而不是字典。 如果是这样, pd.json_normalize
仍然能够将其展平为嵌套的 json。
对于这种情况,您可以将pd.json_normalize
与不同的record_path
一起使用,然后将 2 组合在一起以创建单个平面表。
data =[{'ID': '11348',
'NAME': 'Yanara',
'LAST_NAME': 'Araneda',
'LEAD_ID': '17772',
'EMAIL': [{'ID': '42400',
'VALUE_TYPE': 'WORK',
'VALUE': 'yanara.araneda.moraga@gmail.com',
'TYPE_ID': 'EMAIL'}]},
{'ID': '11346',
'NAME': 'Carlos ',
'LAST_NAME': 'Gonzalez ',
'LEAD_ID': '17782',
'EMAIL': [{'ID': '42390',
'VALUE_TYPE': 'WORK',
'VALUE': 'cmgclima@gmail.com',
'TYPE_ID': 'EMAIL'}]},
{'ID': '11344',
'NAME': 'Alcides',
'LAST_NAME': 'Gonzalez',
'LEAD_ID': '11006',
'EMAIL': [{'ID': '42376',
'VALUE_TYPE': 'WORK',
'VALUE': 'makogonzalez@gmail.com',
'TYPE_ID': 'EMAIL'}]}]
p1 = pd.json_normalize(data).drop('EMAIL', axis=1)
p2 = pd.json_normalize(data, record_path='EMAIL', record_prefix='EMAIL.')
df = p1.merge(p2, left_index=True, right_index=True)
print(df)
ID NAME LAST_NAME LEAD_ID EMAIL.ID EMAIL.VALUE_TYPE \
0 11348 Yanara Araneda 17772 42400 WORK
1 11346 Carlos Gonzalez 17782 42390 WORK
2 11344 Alcides Gonzalez 11006 42376 WORK
EMAIL.VALUE EMAIL.TYPE_ID
0 yanara.araneda.moraga@gmail.com EMAIL
1 cmgclima@gmail.com EMAIL
2 makogonzalez@gmail.com EMAIL
如果您的数据没有'EMAIL'
的列表值,那么获得所需内容将非常容易。 只有pd.json_normalize(data)
就足够了。 -
data =[{'ID': '11348',
'NAME': 'Yanara',
'LAST_NAME': 'Araneda',
'LEAD_ID': '17772',
'EMAIL': {'ID': '42400',
'VALUE_TYPE': 'WORK',
'VALUE': 'yanara.araneda.moraga@gmail.com',
'TYPE_ID': 'EMAIL'}},
{'ID': '11346',
'NAME': 'Carlos ',
'LAST_NAME': 'Gonzalez ',
'LEAD_ID': '17782',
'EMAIL': {'ID': '42390',
'VALUE_TYPE': 'WORK',
'VALUE': 'cmgclima@gmail.com',
'TYPE_ID': 'EMAIL'}},
{'ID': '11344',
'NAME': 'Alcides',
'LAST_NAME': 'Gonzalez',
'LEAD_ID': '11006',
'EMAIL': {'ID': '42376',
'VALUE_TYPE': 'WORK',
'VALUE': 'makogonzalez@gmail.com',
'TYPE_ID': 'EMAIL'}}]
print(pd.json_normalize(data))
ID NAME LAST_NAME LEAD_ID EMAIL.ID EMAIL.VALUE_TYPE \
0 11348 Yanara Araneda 17772 42400 WORK
1 11346 Carlos Gonzalez 17782 42390 WORK
2 11344 Alcides Gonzalez 11006 42376 WORK
EMAIL.VALUE EMAIL.TYPE_ID
0 yanara.araneda.moraga@gmail.com EMAIL
1 cmgclima@gmail.com EMAIL
2 makogonzalez@gmail.com EMAIL
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.