如何将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)
步骤解释
- 解析JSON字符串:用
ast.literal_eval把CSV里的字符串形式的列表/字典转换成Python对象,比json.loads更兼容单引号格式的JSON。 - 拆分字典列表:
explode('data')把列表中的每个字典拆成单独行,这样每一行对应一个Day的完整数据。 - 展开字典字段:
json_normalize把字典的键(name和data)转换成单独的列,和原id列合并。 - 拆分数值列表并生成索引:再次
explode('data')把每个Day的数值列表拆成单独行,用groupby.cumcount()生成每个Day下的元素索引(0、1...)。 - 调整列顺序:最后把列调整成你需要的顺序即可。
如果你的data列已经是Python对象(不是字符串),可以直接跳过第一步的converters参数。
内容的提问来源于stack exchange,提问作者GeothermalSpring
相关产品推荐
相关产品推荐

