You need to enable JavaScript to run this app. pandas对混合单字典与字典列表的列执行explode报KeyError:0如何解决
优惠活动
大模型
产品
解决方案
定价
更多

pandas对混合单字典与字典列表的列执行explode报KeyError:0如何解决

解决方案

问题核心原因是explode仅支持对列表型可迭代对象展开,单列的字典会被识别为标量无法展开,同时你之前的代码还存在列名大小写不一致的问题(定义的列名是Column name,explode时写的是Column Name,大小写不同也会触发异常)。

完整实现方案

这套方案全为pandas矢量化操作,162万行数据可在分钟级处理完成,无需分批:

import pandas as pd
from ast import literal_eval

# 1. 将字符串格式的嵌套数据转为Python原生对象,注意列名大小写要完全一致
df['Column name'] = df['Column name'].apply(literal_eval)

# 2. 统一格式:所有值转为列表,单个字典包裹为单元素列表,解决explode报错问题
df['Column name'] = df['Column name'].apply(lambda x: x if isinstance(x, list) else [x])

# 3. 展开列,每个主体拆为单独一行
df = df.explode('Column name', ignore_index=True)

# 4. 将字典的键展开为独立列
attr_df = pd.json_normalize(df['Column name'])
# 若需要保留原表其他列,执行合并;不需要可跳过这步直接处理attr_df
df = pd.concat([df.drop('Column name', axis=1), attr_df], axis=1)

# 5. 提取每个主体的最高值属性,此处以Attribute1/2/3三个字段为例
attr_cols = ['Attribute1', 'Attribute2', 'Attribute3']
# 最高值对应的属性名
df['max_attr_name'] = df[attr_cols].idxmax(axis=1)
# 最高值的具体数值
df['max_attr_value'] = df[attr_cols].max(axis=1)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.21 17:15:08