如果某些子记录不存在,则python json.normalize错误

如果某些子记录不存在,则python json.normalize错误,python,python-3.x,pandas,dataframe,nested,Python,Python 3.x,Pandas,Dataframe,Nested,我需要帮助规范化DataFrame中的列。 这是输入 df={0:[{'code':1,'Category':'X'}, {'Code':2,'Category':'Y','snapshots':[{'Address':{'City':'City B'}]}, {'Code':3,'Category':'Z','snapshots':[{'Address':{'City':'City C'}]} ] } df=pd.DataFrame(df) 我的代码: df_1=pd_json.json_n

我需要帮助规范化DataFrame中的列。 这是输入

df={0:[{'code':1,'Category':'X'},
{'Code':2,'Category':'Y','snapshots':[{'Address':{'City':'City B'}]},
{'Code':3,'Category':'Z','snapshots':[{'Address':{'City':'City C'}]}
]
}
df=pd.DataFrame(df)
我的代码:

df_1=pd_json.json_normalize(df[0],
meta=[“代码”],
记录路径=[“快照”],
记录_prefix=“快照”,
errors=“忽略”
)
df_2=(df_1.drop('snapshots.Address',1)
.assign(**df_1[“snapshots.Address”].dropna()
.apply(pd.Series)。添加前缀('snapshots.Address'))
错误:

回溯(最近一次呼叫最后一次):

文件“”,第5行,在 errors=“忽略”

文件 “C:\Users\my\u user\AppData\Local\Continuum\anaconda3\lib\site packages\pandas\io\json\normalize.py”, 第267行,json_规范化 _递归提取(数据,记录路径,{},级别=0)

文件 “C:\Users\my\u user\AppData\Local\Continuum\anaconda3\lib\site packages\pandas\io\json\normalize.py”, 第244行,in_递归_提取 recs=_pull_字段(对象,路径[0])

文件 “C:\Users\my\u user\AppData\Local\Continuum\anaconda3\lib\site packages\pandas\io\json\normalize.py”, 第189行,在“拉”字段中 结果=结果[规格]

KeyError:“快照”

“代码=1”的数据帧中缺少“快照”。 我的想法是将“快照”添加到数据帧中缺少快照的位置。但我不知道怎么做

预期结果:

df_2
Out[617]:
代码:snapshots.Address.City
01南
1 2城市B
2 3城市C

它不起作用,因为您有一个值没有
快照
键,所以您需要使用:

df = pd.DataFrame(df[0]).iloc[:, 1:]
df['snapshots.Address.City'] = df.pop('snapshots').apply(lambda x: x[0]['Address']['City'] if x is not np.nan else x)
print(df)
输出:

   Code snapshots.Address.City
0     1                    NaN
1     2                 City B
2     3                 City C

谢谢@U10转发。我试图在我的情况下修改它,但没有成功。如果“快照”中有更多列,则不仅仅是“地址”。此外,“地址”栏中不仅有“城市”栏。因此,结果中的列将是,例如:代码、snapshots.columnA、snapshots.columnB、snapshots.columnC、snapshots.Address.City、snapshots.Address.Street、snapshots.Address.postcode、snapshots.Address.Number等??