如何将pandas列中存储的JSON内容展开为DataFrame的独立列
pandas JSON列展开为独立列解决方案
前置依赖
需要提前导入pandas和json库:
import pandas as pd import json
方案1:使用pd.json_normalize(推荐,支持嵌套JSON)
场景1:json_col存储的是JSON字符串
你示例中的JSON默认是字符串格式,按以下方式处理:
# 构造你给出的示例DataFrame df = pd.DataFrame({ 'json_col': [ '{"name":"John","role":"manager", "age":40}', '{"name":"Mary","role":"director", "age":50}' ] }) # 先将JSON字符串解析为Python字典,再调用json_normalize展开 expanded_df = pd.json_normalize(df['json_col'].apply(json.loads))
场景2:json_col已经是Python字典类型
如果你的列已经提前解析为字典,省略解析步骤直接调用即可:
expanded_df = pd.json_normalize(df['json_col'])
方案2:转列表后构造DataFrame(适合扁平JSON)
针对没有嵌套结构的扁平JSON,也可以用更简洁的写法:
# 字符串版本 expanded_df = pd.DataFrame(df['json_col'].apply(json.loads).tolist()) # 字典版本 expanded_df = pd.DataFrame(df['json_col'].tolist())
保留原始其他列
如果原始DataFrame除了json_col还有其他字段需要保留,可用concat拼接结果:
final_df = pd.concat([df.drop('json_col', axis=1), expanded_df], axis=1)
运行后得到的expanded_df/final_df就是你期望的输出格式:
name role age 0 John manager 40 1 Mary director 50
小提示
如果你的JSON存在嵌套结构,pd.json_normalize会自动将嵌套键用.拼接为列名,不需要额外处理。
内容的提问来源于stack exchange,提问作者LLL
相关产品推荐
相关产品推荐

