CSV文件字典类型列拆分为独立列,pd.Series方法失效如何解决
Pandas字典列拆分为独立列的故障排查方案
你遇到的问题大多由CSV读取后的数据格式异常导致,可按以下步骤排查解决:
- 原因1:字典列实际为字符串格式
CSV存储时会自动将字典结构序列化为字符串,直接读取后列元素类型为str而非dict,无法被pd.Series识别拆分。
修复代码如下:
import pandas as pd import ast # 读取CSV后先将字符串格式的字典转为真实字典 df['目标字典列名'] = df['目标字典列名'].apply(lambda x: ast.literal_eval(x) if isinstance(x, str) else x) # 执行拆分操作 expand_cols = df.set_index('id')['目标字典列名'].apply(pd.Series) # 拆分结果合并回原表 df = df.join(expand_cols, on='id')
- 原因2:列内存在非字典异常值
如果列中存在空值、NaN或其他不符合字典格式的脏数据,会导致拆分逻辑失效。可以先对异常值做统一处理:
# 将非字典值统一填充为空字典,避免拆分报错 df['目标字典列名'] = df['目标字典列名'].apply(lambda x: x if isinstance(x, dict) else {}) expand_cols = df.set_index('id')['目标字典列名'].apply(pd.Series)
- 更优替代方案
高版本pandas更推荐使用json_normalize方法实现字典列拆分,兼容性和处理效率优于apply(pd.Series),无需提前设置索引:
# 直接拆分字典列 expand_cols = pd.json_normalize(df['目标字典列名']) # 合并回原表,同时删除原来的字典列 df = pd.concat([df.drop('目标字典列名', axis=1), expand_cols], axis=1)
内容的提问来源于stack exchange,提问作者sameer abdullah
相关产品推荐
相关产品推荐

