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

如何在Pandas中将深度嵌套JSON数据扁平化为指定结构的DataFrame

问题

我有一份嵌套程度较深的JSON数据,其中存储了不同“产品”的情感指标,我希望将该数据加载为Pandas DataFrame,将以下字段存储为独立列:

  • product name(产品名称)
  • language(语言)
  • sentiment(情感类型)
  • platform(平台)
  • started date(开始日期)
  • ended date(结束日期)
  • value(数值)

注意:完整数据载荷中的所有产品名称均不相同。当前片段展示的是engagement的情感指标,实际数据还包含其他类型的情感指标。
示例JSON结构:

{
    "product_ABC": {
        "en": {
            "engagement": {
                "Twitch": {
                    "series": [
                        {
                            "started_at": "2021-10-05 00:00:00 -0700",
                            "ended_at": "2021-10-06 00:00:00 -0700",
                            "value": 17274
                        },
                        {
                            "started_at": "2021-10-06 00:00:00 -0700",
                            "ended_at": "2021-10-07 00:00:00 -0700",
                            "value": 11354
                        }
                    ]
                },
                "Youtube": {
                    "series": [
                        {
                            "started_at": "2021-10-05 00:00:00 -0700",
                            "ended_at": "2021-10-06 00:00:00 -0700",
                            "value": 76
                        },
                        {
                            "started_at": "2021-10-06 00:00:00 -0700",
                            "ended_at": "2021-10-07 00:00:00 -0700",
                            "value": 28
                        }
                    ]
                }
            }
        }
    }
}

最终需要得到扁平化结构的DataFrame。

解决方案

你可以通过逐层遍历JSON嵌套结构,把每层的关键信息和底层的时间序列数据拼接,最终转换为DataFrame,代码如下:

import pandas as pd
import json

# 加载本地JSON文件,替换为你自己的文件路径
with open("你的JSON数据文件路径.json", "r", encoding="utf-8") as f:
    data = json.load(f)

# 存储所有行记录的临时列表
records = []

# 遍历第一层:产品名称
for product_name, lang_map in data.items():
    # 遍历第二层:语言
    for language, sentiment_map in lang_map.items():
        # 遍历第三层:情感类型
        for sentiment, platform_map in sentiment_map.items():
            # 遍历第四层:平台
            for platform, series_info in platform_map.items():
                # 遍历时间序列明细
                for item in series_info["series"]:
                    records.append({
                        "product name": product_name,
                        "language": language,
                        "sentiment": sentiment,
                        "platform": platform,
                        "started date": item["started_at"],
                        "ended date": item["ended_at"],
                        "value": item["value"]
                    })

# 转换为DataFrame
df = pd.DataFrame(records)

运行后得到的df就是你需要的扁平化表格,兼容多情感类型、多产品、多语言的场景,只要JSON结构和示例一致就无需修改代码。
输出示例:

product namelanguagesentimentplatformstarted dateended datevalue
product_ABCenengagementTwitch2021-10-05 00:00:00 -07002021-10-06 00:00:00 -070017274
product_ABCenengagementTwitch2021-10-06 00:00:00 -07002021-10-07 00:00:00 -070011354
product_ABCenengagementYoutube2021-10-05 00:00:00 -07002021-10-06 00:00:00 -070076
product_ABCenengagementYoutube2021-10-06 00:00:00 -07002021-10-07 00:00:00 -070028

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 10:57:02