Python中如何将pandas内的JSON行数据拆分为多列(扁平化)
问题原因
你遇到的报错本质是待处理列的JSON数据还处于字符串格式,json_normalize仅支持接收Python字典/列表类的结构化输入,调用字符串对象的values属性自然会抛出异常。
解决步骤
- 先将JSON字符串列转换为Python字典格式
import pandas as pd import json # 替换下方的json_col为你实际存储JSON数据的列名 df['json_col'] = df['json_col'].apply(json.loads)
- 对整列执行扁平化操作,再和原表非JSON字段拼接
# 扁平化JSON字段 json_flat = pd.json_normalize(df['json_col']) # 合并结果,删除原JSON列避免冗余 final_df = pd.concat([df.drop(columns=['json_col']), json_flat], axis=1)
可选适配方案
- 若存在JSON格式异常的行,可加异常捕获避免处理中断:
def safe_json_load(s): try: return json.loads(s) except (json.JSONDecodeError, TypeError): # 格式错误的行返回空字典,后续可以过滤处理 return {} df['json_col'] = df['json_col'].apply(safe_json_load)
- 若JSON内部有嵌套数组需要展开,可给
json_normalize传入record_path和meta参数指定展开规则,示例如下:
# 示例:展开JSON中名为records的嵌套数组,同时保留外层的id、create_time字段 json_flat = pd.json_normalize( df['json_col'], record_path='records', meta=['id', 'create_time'], record_prefix='record_' )
内容的提问来源于stack exchange,提问作者wm10
相关产品推荐
相关产品推荐

