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

如何将CSV中嵌套字典数组数据转换为指定行格式?

如何将嵌套JSON格式的CSV列展开为扁平表格?

我明白你的需求——你需要把CSV里嵌套的列表+字典结构完全展开成扁平的行,而pd.apply(Series)只能处理第一层字典,没法深入到列表里的元素。下面是具体的解决方案:

你的原始数据(修正了CSV标准格式)

id,data
1,"[{""name"":""Day 1"", ""data"":[12,13]},{""name"":""Day 2"", ""data"":[34,45]}]"

期望输出

id,name,index,data
1,Day 1,0,12
1,Day 1,1,13
1,Day 2,0,34
1,Day 2,1,45

完整解决方案代码

import pandas as pd
import ast

# 读取CSV文件,同时解析data列的字符串为Python原生数据结构
df = pd.read_csv('your_file.csv', converters={'data': ast.literal_eval})

# 第一步:将data列的列表拆分为单独行,每个字典占一行
df_exploded = df.explode('data', ignore_index=True)

# 第二步:把字典里的name和data字段展开为独立列,同时保留原id
df_normalized = pd.json_normalize(df_exploded['data']).join(df_exploded['id'])

# 第三步:展开每个name对应的data列表,生成index列记录元素位置
final_df = df_normalized.explode('data', ignore_index=True)
final_df['index'] = final_df.groupby(['id', 'name']).cumcount()

# 调整列顺序到你需要的格式
final_df = final_df[['id', 'name', 'index', 'data']]

# 查看结果
print(final_df)

步骤解释

  1. 解析JSON字符串:用ast.literal_eval把CSV里的字符串形式的列表/字典转换成Python对象,比json.loads更兼容单引号格式的JSON。
  2. 拆分字典列表:explode('data')把列表中的每个字典拆成单独行,这样每一行对应一个Day的完整数据。
  3. 展开字典字段:json_normalize把字典的键(name和data)转换成单独的列,和原id列合并。
  4. 拆分数值列表并生成索引:再次explode('data')把每个Day的数值列表拆成单独行,用groupby.cumcount()生成每个Day下的元素索引(0、1...)。
  5. 调整列顺序:最后把列调整成你需要的顺序即可。

如果你的data列已经是Python对象(不是字符串),可以直接跳过第一步的converters参数。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 03:53:04