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



我需要帮助规范化熊猫数据帧中的列。 这是输入

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=["Code"],
record_path=["snapshots"],
record_prefix="snapshots.",
errors="ignore"
)
df_2 = (df_1.drop('snapshots.Address', 1)
.assign(**df_1["snapshots.Address"].dropna()
.apply(pd.Series).add_prefix('snapshots.Address.')))

错误:

回溯(最近一次调用):

文件 ",第 5 行,在 错误="忽略">

文件 "C:\Users\my_user\AppData\Local\Continuum\anaconda3\lib\site-packages\pandas\io\jsonormalize.py", 267号线,json_normalize _recursive_extract(data, record_path, {}, level=0)

文件 "C:\Users\my_user\AppData\Local\Continuum\anaconda3\lib\site-packages\pandas\io\jsonormalize.py", 244路,_recursive_extract recs = _pull_field(obj, path[0])

文件 "C:\Users\my_user\AppData\Local\Continuum\anaconda3\lib\site-packages\pandas\io\jsonormalize.py", 189号线,_pull_field 结果 = 结果[规格]

密钥错误:"快照">

">

Code=1"的数据帧中缺少"快照"。 我的想法是将"快照"添加到数据帧中缺少它的位置。但我不知道该怎么做。

预期成果:

df_2
Out[617]: 
Code snapshots.Address.City
0     1                    NaN
1     2                 City B
2     3                 City C

它不起作用,因为您有一个没有键的值snapshots因此您需要使用:

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

最新更新