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

如何拆分含多JSON数组的Pandas列,将数组键值转为DataFrame行列

将嵌套JSON的samples数组转换为Pandas DataFrame

核心处理逻辑

直接提取JSON结构中的samples数组作为数据源,同时处理嵌套字段(如utc下的$numberLong),将其展开为DataFrame的普通列。

代码实现

场景1:处理内存中的JSON对象

假设你已经将目标JSON加载为Python字典data:

import pandas as pd

# 示例加载后的JSON字典
data = {
    "_id": {"$oid": "6090ba8fccd167ce183b5ebc"},
    "day": "2021-05-04",
    "sensorType": "eurecam",
    "sensorid": "74",
    "first": {"$numberLong": "1620097683000"},
    "last": {"$numberLong": "1620103653000"},
    "nsamples": 200,
    "samples": [
        {
            "occupancy_state": "1,0,0,0",
            "rtc_utc_time": "2021-05-04 03:07:58",
            "sdcard_site": "BE",
            "sdcard_chain": "DAG",
            "sdcard_line": "1,BE",
            "utc": {"$numberLong": "1620097683000"}
        },
        # 更多样本项...
    ]
}

# 提取samples数组
samples_list = data["samples"]

# 展开嵌套的utc字段
for item in samples_list:
    if "utc" in item and isinstance(item["utc"], dict):
        item["utc"] = item["utc"]["$numberLong"]

# 转换为DataFrame
df = pd.DataFrame(samples_list)
print(df.head())

场景2:从JSON文件读取(如MongoDB导出的批量数据)

如果数据以每行一个JSON文档的形式存储在文件中,可结合json_normalize处理嵌套:

import pandas as pd
from pandas import json_normalize

# 读取JSON文件(每行一个独立文档)
raw_df = pd.read_json("your_data_file.json", lines=True)

# 展开samples数组并处理嵌套字段
samples_df = json_normalize(raw_df["samples"].explode())

# 若需保留原文档的全局字段(如sensorid、day),可合并到结果中
final_df = raw_df.drop("samples", axis=1).join(samples_df)
print(final_df.head())

效果说明

转换后的DataFrame会将samples数组中的每个键(occupancy_state、rtc_utc_time等)作为列名,数组中的每个元素对应一行数据;嵌套字段会被展开为普通列值,避免DataFrame中出现多层嵌套结构。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.17 04:32:09