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

将含嵌套JSON的CSV转换为Pandas DataFrame并拆分嵌套列

拆分CSV中嵌套JSON列的解决方案

我刚好处理过类似的DynamoDB格式嵌套JSON数据,给你一步步来解决:

步骤1:加载CSV并解析JSON字符串

首先用Pandas加载你的CSV文件,然后把data列里的JSON字符串转换成Python字典:

import pandas as pd
import json

# 替换成你的CSV文件路径
df = pd.read_csv('your_data.csv')

# 将data列的JSON字符串解析为字典
df['data'] = df['data'].apply(json.loads)

步骤2:处理DynamoDB格式的嵌套值

你的JSON看起来是DynamoDB的存储格式(每个值都带类型标识,比如{"N": "3377"}),所以需要先提取出实际的数值/字符串。写一个小函数来处理这个:

def get_actual_value(dynamo_item):
    """从DynamoDB格式的键值对中提取实际值"""
    if isinstance(dynamo_item, dict):
        # DynamoDB每个属性只会有一个类型键(N/S/B等),直接取第一个值即可
        return next(iter(dynamo_item.values()))
    return dynamo_item

然后把data列里的每个字典都用这个函数处理一遍:

# 处理所有嵌套的DynamoDB格式值
processed_data = df['data'].apply(
    lambda item: {key: get_actual_value(value) for key, value in item.items()}
)

步骤3:展开嵌套字典为独立列

用pd.json_normalize把处理后的字典展开成单独的列,再和原DataFrame合并:

# 展开嵌套字典为DataFrame
expanded_df = pd.json_normalize(processed_data)

# 和原表合并,去掉原来的data列
final_df = pd.concat([df.drop('data', axis=1), expanded_df], axis=1)

示例效果

比如你的原数据中某一行的data列是:

{ "deviceId" : { "N" : "3377" }, "temperature" : { "N" : "22.3" }, "status" : { "S" : "online" } }

处理后会新增deviceId、temperature、status三列,对应的值分别是3377、22.3、online,和原表的deviceId、timestamp列完美合并。

如果你的JSON有更深层次的嵌套(比如{"metrics": {"humidity": {"N": "60"}}}),json_normalize会自动用.分隔嵌套层级,生成metrics.humidity这样的列名,非常方便。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:03:13