Python Pandas 常见报错解析

5次阅读

Python Pandas 常见报错解析

KeyError:列名不存在

这是最常遇到的错误,比如写 df[‘age’] 但实际列名是 ‘Age’‘age_group’pandas 区分大小写,且空格、下划线、中英文标点都会导致不匹配。

排查建议:

  • df.columns.tolist() 查看真实列名,注意前后空格——可加 .str.strip() 清洗
  • df.columns.str.contains(‘age’, case=False) 模糊搜索相关列
  • 读取 CSV 时加 skipinitialspace=True 避免列名开头空格

SettingWithcopyWarning:链式赋值警告

当你写类似 df[df[‘score’] > 80][‘grade’] = ‘A’ 时,Pandas 不确定你是在修改原 DataFrame 还是副本,于是发出警告,后续可能赋值失败。

正确做法:

立即学习Python免费学习笔记(深入)”;

  • .loc 显式定位:df.loc[df[‘score’] > 80, ‘grade’] = ‘A’
  • 确认操作对象是否为视图(view)或副本(copy),可用 df._is_copy(仅调试用,不推荐依赖)
  • 必要时主动复制:df2 = df.copy(),再对 df2 操作

ValueError:长度不匹配(如 cannot set using a list-like Indexer with a different length)

常见于赋值时左右两边长度不一致。例如用布尔索引选了 120 行,却试图赋一个长度为 100 的列表。

典型场景和解决方式:

  • 赋值前检查长度:len(df[mask]) == len(values)
  • 用标量赋值(如 df.loc[mask, ‘col’] = 0)最安全,Pandas 会自动广播
  • 避免直接对 df[mask][‘col’] = … 赋值——改用 .loc.iloc

TypeError:无法对不可比较类型执行操作

比如对含字符串和 NaN 的列调用 .sum() 或比较 > 5,或日期列被读成 Object 类型后做算术运算。

快速修复步骤:

  • 数据类型df.dtypes,重点关注报错列
  • 转类型:数值列用 pd.to_numeric(col, errors=’coerce’);日期列用 pd.to_datetime(col, errors=’coerce’)
  • 处理缺失值:转换后 NaN 自动产生,再用 .dropna().fillna() 统一处理

MemoryError 或运行极慢

读大文件或执行 groupby/merge 时容易触发,本质是数据量超出内存承载或算法复杂度高。

轻量级优化方案:

  • 读取时限制列:pd.read_csv(file, usecols=[‘a’,’b’,’c’])
  • 指定低精度类型:dtype={‘user_id’: ‘category’, ‘score’: ‘int32’}
  • 分块处理:for chunk in pd.read_csv(file, chunksize=10000): process(chunk)
  • 替代 groupby:对超大集合,先 df.sort_values().groupby(…, sort=False) 可提速
text=ZqhQzanResources