如何解析DataFrame的JSON列并将解析值作为新列添加到原数据框
Pandas解析DataFrame JSON列并提取指定键追加为新列
针对保留原列、拆分JSON列提取指定值为新列的需求,直接按以下场景选对应实现即可。
前置示例数据构造
先构造和描述一致的测试DataFrame:
import pandas as pd df = pd.DataFrame({ 'column1': ['One'], 'column2': ['Two'], 'json_column': [{'A': '1', 'B': '2', 'C': '3'}] })
场景1:json_column列存储的是原生字典对象
如果列里存的已经是Python字典(不是字符串格式的JSON),直接用apply提取目标键即可:
- 提取单个键(比如提取键
B,新增同名列)
# 用get取值避免键不存在时报错,缺失值自动填充None df['B'] = df['json_column'].apply(lambda x: x.get('B'))
- 批量提取多个键
# 把要提取的键放到列表里批量处理 target_keys = ['A', 'B', 'C'] for key in target_keys: df[key] = df['json_column'].apply(lambda x: x.get(key))
场景2:json_column列存储的是JSON格式字符串
如果列里存的是类似'{"A":"1","B":"2","C":"3"}'的文本,先转成字典再做提取:
import json # 先把JSON字符串转为字典对象 df['json_column'] = df['json_column'].apply(json.loads) # 后续提取逻辑和场景1完全一致 df['B'] = df['json_column'].apply(lambda x: x.get('B'))
如果用的是1.0及以上版本的Pandas,要提取JSON里的全部键,不用手动枚举,直接用json_normalize批量拆分后拼接回原表即可:
# 拆分JSON列得到所有键对应的新列,和原表按行拼接,自动保留所有原列 df = pd.concat([df, pd.json_normalize(df['json_column'])], axis=1)
处理完成后输出结果和预期一致:
| column1 | column2 | json_column | B |
|---|---|---|---|
| One | Two | {'A': '1', 'B': '2', 'C': '3'} | 2 |
内容的提问来源于stack exchange,提问作者Xahal
相关产品推荐
相关产品推荐

