使用pandas json_normalize提取嵌套JSON元数据遇问题求助
解决pandas json_normalize多层嵌套数组提取元数据的问题
你的JSON数据结构:
data=[ {'a':'aa', 'b':{'b1':'bb1','b2':'bb2'}, 'c':[{ 'ca':[{'ca1':'caa1' }] }] }]
预期输出表格:
| ca1 | a | b.b1 |
|---|---|---|
| caa1 | aa | bb1 |
你尝试的代码:
pd.json_normalize(data, record_path=['c','ca'], meta = ['a',['b','b1']])
但无法识别b1键,仅设置record_path='c'时能正常找到该键。
方法1:使用点分隔字符串指定嵌套元数据字段
如果你的pandas版本对数组形式的嵌套meta路径解析有问题,改用点分隔的字符串指定b.b1即可解决:
import pandas as pd df = pd.json_normalize( data, record_path=['c', 'ca'], meta=['a', 'b.b1'] ) # 调整列顺序匹配预期结果 df = df[['ca1', 'a', 'b.b1']] print(df)
输出结果:
ca1 a b.b1 0 caa1 aa bb1
方法2:分两步展开嵌套数组
如果方法1仍不生效,分步展开嵌套数组会更稳妥:
import pandas as pd # 第一步:展开外层c数组,提取a和b.b1 df_c = pd.json_normalize(data, record_path='c', meta=['a', ['b', 'b1']]) # 第二步:展开内层ca数组,保留已提取的元数据 final_df = pd.json_normalize( df_c.to_dict('records'), record_path='ca', meta=['a', 'b.b1'] ) # 调整列顺序 final_df = final_df[['ca1', 'a', 'b.b1']] print(final_df)
问题原因
当record_path指定多层嵌套数组(如['c','ca'])时,部分旧版本pandas对meta参数中数组形式的嵌套路径(['b','b1'])解析存在兼容性问题,无法正确关联原始数据中的嵌套字段。改用点分隔字符串路径或分步展开数组,可绕过该解析问题,确保元数据被正确提取。
内容的提问来源于stack exchange,提问作者fil
相关产品推荐
相关产品推荐

