You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

将含列表式列与值的JSON数据标准化为Pandas DataFrame

解决列名与数据分离的JSON转Pandas DataFrame问题

核心思路

你的JSON结构属于列名和数据行分离存储的类型,pd.json_normalize是为嵌套键值对JSON设计的,自然没法直接处理这种结构。直接提取列名列表和数据列表,用pd.DataFrame构造才是最直接的方案。

基础场景示例

假设你的JSON数据结构如下:

{
  "meta": {"source": "sensor_data"},
  "columns": ["timestamp", "temperature", "humidity"],
  "data": [
    ["2024-05-20 10:00", 25.6, 60],
    ["2024-05-20 10:05", 25.8, 59],
    ["2024-05-20 10:10", 26.0, 58]
  ]
}

对应的处理代码:

import pandas as pd
import json

# 加载JSON为字典(如果是文件的话用json.load())
json_data = json.loads(your_json_string)  # 或者从文件读取:json.load(open("data.json"))

# 直接用列名和数据构造DataFrame
df = pd.DataFrame(data=json_data["data"], columns=json_data["columns"])

# 如果需要保留meta里的附加信息,把它合并到每一行
meta_info = pd.json_normalize(json_data["meta"])
# 把meta数据广播到所有行
df = pd.concat([df, meta_info.loc[meta_info.index.repeat(len(df))].reset_index(drop=True)], axis=1)

复杂嵌套分组场景

如果JSON里包含多个分组,每个分组都有独立的列名和数据,遍历分组逐个处理后合并即可:

# 示例嵌套JSON
complex_json = {
    "groups": [
        {
            "group_name": "room1",
            "columns": ["timestamp", "temp"],
            "data": [["2024-05-20", 25], ["2024-05-21", 26]]
        },
        {
            "group_name": "room2",
            "columns": ["timestamp", "temp"],
            "data": [["2024-05-20", 24], ["2024-05-21", 25]]
        }
    ]
}

dfs = []
for group in complex_json["groups"]:
    temp_df = pd.DataFrame(group["data"], columns=group["columns"])
    temp_df["group_name"] = group["group_name"]
    dfs.append(temp_df)

final_df = pd.concat(dfs, ignore_index=True)

为什么pd.json_normalize没用?

pd.json_normalize的作用是把嵌套的JSON对象(比如每个数据项是{"timestamp": "...", "temp": 25}这种键值对)展平成表格。而你的结构是列名统一存成一个列表,数据是对应位置的列表,这种情况下json_normalize会把columns和data当成普通字段,自然会出现列名变成单元格值的问题。

内容的提问来源于stack exchange,提问作者alextc

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.16 13:12:33