如何将含JSON对象列的Pandas DataFrame转换为结构化DataFrame?
把Pandas中含JSON对象的列转成结构化DataFrame的方案
嘿,这个需求太常见了,我给你分两种场景来拆解,亲测好用~
场景1:DataFrame的某列每个单元格是单个JSON对象(或JSON字符串)
就是你给出的示例:players列每个元素是{"name": "tony", "age": 57}这类结构,不管是已经解析好的字典,还是字符串格式的JSON,都能轻松处理:
步骤示例代码
import pandas as pd import json # 先模拟你的原始数据(这里假设players列是JSON字符串格式,如果已经是字典,跳过转字典那步) df = pd.DataFrame({ 'players': ['{"name": "tony", "age": 57}', '{"name": "peter", "age": 46}'] }) # 1. 把JSON字符串转成Python字典(如果你的列已经是字典,这行可以删掉) df['players'] = df['players'].apply(json.loads) # 方法一:用pd.json_normalize(推荐,尤其适合嵌套JSON) structured_df = pd.json_normalize(df['players']) # 方法二:用apply(pd.Series)(简单直观,适合平级键值对) # structured_df = df['players'].apply(pd.Series) # 看看结果 print(structured_df)
运行后就能得到你想要的结构化DataFrame:
name age 0 tony 57 1 peter 46
场景2:原始数据是包含players数组的完整JSON结构
如果你的数据源是整个JSON,比如{ "players": [{ "age": 57, "name":"tony" }, { "age": 46, "name":"peter" }] },那直接解析数组部分就行:
步骤示例代码
import pandas as pd import json # 从JSON字符串加载(如果是JSON文件,换成open('your_file.json').read()) json_content = '{ "players": [{ "age": 57, "name":"tony" }, { "age": 46, "name":"peter" }] }' data_dict = json.loads(json_content) # 直接展开players数组 structured_df = pd.json_normalize(data_dict['players']) print(structured_df)
如果是直接从JSON文件读取,还能更简洁:
structured_df = pd.json_normalize(pd.read_json('your_json_file.json')['players'])
小提示
- 如果你的JSON有嵌套结构(比如
{"name": "tony", "info": {"height": 180, "weight": 75}}),pd.json_normalize会自动把嵌套字段展开成info.height这种列名,非常方便; - 如果只是简单的平级键值对,
apply(pd.Series)的代码更短,理解成本更低。
内容的提问来源于stack exchange,提问作者More Than Five
相关产品推荐
相关产品推荐

