如何拆分Pandas DataFrame嵌套列表列,解决pop操作报KeyError问题
错误原因
- 场景1:重复执行代码:
pop()是原地操作,执行一次就会把原DataFrame的info列删除,再次执行时找不到该列就会抛出KeyError - 场景2:列名不匹配:实际列名和
info存在偏差,比如有首尾空格、大小写差异(如Info、info) - 场景3:数据加载异常:原始数据导入时未成功读取到
info列
另外你原有写法还存在展开逻辑问题:没有处理info列每行的外层列表,直接转DataFrame会得到整行存储元组的单列,而非拆分后的多列,下述修复代码已同步解决该问题。
修复方案
首先做列名校验,避免KeyError:
# 清除列名首尾空格,统一列名格式 data.columns = data.columns.str.strip() # 确认info列存在 if 'info' not in data.columns: raise ValueError("未找到info列,请检查原始数据表结构")
再处理嵌套结构展开,自动生成要求格式的列名:
# 拆分info列为多列 info_expand = pd.DataFrame( data['info'].map(lambda x: x[0]).tolist(), index=data.index, columns=[f'data_info{i+1}' for i in range(len(data['info'].iloc[0][0]))] ) # 合并到原表,删除原始info列 data = data.drop('info', axis=1).join(info_expand)
效果验证
执行后打印前5行即可查看拆分结果:
print(data.head())
内容的提问来源于stack exchange,提问作者Nabih Bawazir
相关产品推荐
相关产品推荐

