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
相关产品推荐
相关产品推荐

