如何 json_normalize() df 中的特定字段并保留其他列?
How do I json_normalize() a specific field within a df and keep the other columns?
所以这是我的简单示例(我的实际数据集中的 json 字段非常嵌套,所以我一次解包一个级别)。我需要在数据集 post json_normalize().
上保留某些列
https://pandas.pydata.org/docs/reference/api/pandas.json_normalize.html
开始:
预期(Excel 模型):
实际:
import json
d = {'report_id': [100, 101, 102], 'start_date': ["2021-03-12", "2021-04-22", "2021-05-02"],
'report_json': ['{"name":"John", "age":30, "disease":"A-Pox"}', '{"name":"Mary", "age":22, "disease":"B-Pox"}', '{"name":"Karen", "age":42, "disease":"C-Pox"}']}
df = pd.DataFrame(data=d)
display(df)
df = pd.json_normalize(df['report_json'].apply(json.loads), max_level=0, meta=['report_id', 'start_date'])
display(df)
查看有关 json_normalize() 的文档,我认为元参数是我需要保留 report_id 和 start_date 的参数,但它似乎不起作用因为要保留的预期字段没有出现在最终数据集中。
有人有什么建议吗?谢谢。
因为你正在处理一个非常简单的 json 沿着结构化索引,你可以标准化你的框架然后利用 .join
沿着你的轴加入。
from ast import literal_eval
df.join(
pd.json_normalize(df['report_json'].map(literal_eval))
).drop('report_json',axis=1)
report_id start_date name age disease
0 100 2021-03-12 John 30 A-Pox
1 101 2021-04-22 Mary 22 B-Pox
2 102 2021-05-02 Karen 42 C-Pox
所以这是我的简单示例(我的实际数据集中的 json 字段非常嵌套,所以我一次解包一个级别)。我需要在数据集 post json_normalize().
上保留某些列https://pandas.pydata.org/docs/reference/api/pandas.json_normalize.html
开始:
预期(Excel 模型):
实际:
import json
d = {'report_id': [100, 101, 102], 'start_date': ["2021-03-12", "2021-04-22", "2021-05-02"],
'report_json': ['{"name":"John", "age":30, "disease":"A-Pox"}', '{"name":"Mary", "age":22, "disease":"B-Pox"}', '{"name":"Karen", "age":42, "disease":"C-Pox"}']}
df = pd.DataFrame(data=d)
display(df)
df = pd.json_normalize(df['report_json'].apply(json.loads), max_level=0, meta=['report_id', 'start_date'])
display(df)
查看有关 json_normalize() 的文档,我认为元参数是我需要保留 report_id 和 start_date 的参数,但它似乎不起作用因为要保留的预期字段没有出现在最终数据集中。
有人有什么建议吗?谢谢。
因为你正在处理一个非常简单的 json 沿着结构化索引,你可以标准化你的框架然后利用 .join
沿着你的轴加入。
from ast import literal_eval
df.join(
pd.json_normalize(df['report_json'].map(literal_eval))
).drop('report_json',axis=1)
report_id start_date name age disease
0 100 2021-03-12 John 30 A-Pox
1 101 2021-04-22 Mary 22 B-Pox
2 102 2021-05-02 Karen 42 C-Pox