如何将JSON单列数据拆分到Pandas DataFrame多列中?
问题根源
- 你碰到的
TypeError是典型的函数误用:json.loads()仅负责将JSON格式的字符串/字节数据解析为Python字典,而你已经通过urllib3+json库拿到了字典对象,再对字典调用该函数必然报错。 - 拆分
result列的核心需求,本质是要把DataFrame中存储字典的单列,展开为多个独立字段列。
解决方法
根据数据获取方式,分两种场景给出具体实现:
场景1:通过urllib3 + json库获取数据后处理
import urllib3 import json import pandas as pd # 1. 正确获取并解析JSON数据(仅对响应字节用json.loads) http = urllib3.PoolManager() response = http.request('GET', '你的JSON数据源URL') data_dict = json.loads(response.data) # 这里是把字节转字典,是正确用法 # 2. 转换为DataFrame df = pd.DataFrame(data_dict) # 3. 展开result列的字典为多列 result_expanded = pd.json_normalize(df['result']) # 4. 合并原表的其他列(如total)与展开后的列 final_df = pd.concat([df.drop('result', axis=1), result_expanded], axis=1) # 5. 导出到Excel final_df.to_excel('输出文件.xlsx', index=False)
场景2:直接读取本地JSON文件
如果是本地JSON文件,用Pandas直接读取更高效:
import pandas as pd # 1. 读取JSON文件(Pandas会自动完成基础解析) df = pd.read_json('你的本地JSON文件路径') # 2. 展开result列的字典结构 result_expanded = pd.json_normalize(df['result']) # 3. 合并列并导出 final_df = pd.concat([df.drop('result', axis=1), result_expanded], axis=1) final_df.to_excel('输出文件.xlsx', index=False)
特殊情况处理
如果df['result']中存在字符串格式的字典(比如之前错误操作遗留的),可以先转换为字典再展开:
import ast # 遍历result列,把字符串格式的字典转成Python字典 df['result'] = df['result'].apply(lambda x: ast.literal_eval(x) if isinstance(x, str) else x)
内容的提问来源于stack exchange,提问作者Brunck
相关产品推荐
相关产品推荐

