如何使用Python Pandas读取嵌套JSON并转为指定结构DataFrame
解决方法:手动解析嵌套JSON结构生成DataFrame
这个问题我碰到过!你的JSON结构属于嵌套的键值对类型,pd.read_json没法直接识别results里动态变化的键名(比如whatever_name、another_name),所以得先手动解析结构再转成目标DataFrame。
具体步骤:
- 先加载JSON数据(无论是从文件还是字符串)
- 提取全局的
timestamp字段 - 遍历
results里的每个键值对,把键作为name,对应值里的id提取出来,再补充value和timestamp字段 - 把整理好的列表转成DataFrame
代码示例:
import json import pandas as pd # 示例:如果是从文件读取,替换成 open('your_file.json', 'r') 即可 json_data = '''{"results":{"whatever_name":{"id":77},"another_name":{"id":89},"another_name":{"id":60}},"timestamp":123456}''' data = json.loads(json_data) # 提取全局时间戳 global_timestamp = data['timestamp'] # 构建DataFrame的行记录 records = [] for name, result_obj in data['results'].items(): records.append({ 'name': name, 'id': result_obj['id'], 'value': result_obj, # 这里按你需求保留整个子对象作为value;如果实际有单独的value字段,替换成result_obj['value']即可 'timestamp': global_timestamp }) # 生成目标DataFrame df = pd.DataFrame(records) print(df)
输出结果:
name id value timestamp 0 whatever_name 77 {'id': 77} 123456 1 another_name 60 {'id': 60} 123456
重要提醒:
注意你的示例JSON里有重复的键another_name,JSON规范里重复键会被最后出现的键值对覆盖(所以id=89的条目会丢失)。如果你的实际数据里存在重复键,建议先修改原始JSON结构,把results改成数组形式(比如[{"name":"whatever_name", "id":77}, {"name":"another_name", "id":89}]),避免数据丢失。
内容的提问来源于stack exchange,提问作者user3194861
相关产品推荐
相关产品推荐

