drop删列时列名不存在默认报KeyError,应加errors='ignore';推荐用columns=参数而非axis=1;删列后需df.copy()释放内存;正则删列需str.contains(na=False)配合布尔索引。
drop函数删列时列名不存在会报错
直接用
删除列,如果其中某个列名(比如
)根本不在 DataFrame 里,默认会抛出
。这不是 bug,是 pandas 的默认严格模式。
实操建议:
立即学习
“
Python免费学习笔记(深入)
”;
加参数
:遇到不存在的列就跳过,不报错 —— 适合清洗脚本中“尽力删、删不着也不拦路”的场景
想确认哪些列真被删了?删之前先检查:
别用
配合
来“静默试删”,容易掩盖列名拼写错误,后期难 debug
用axis=1还是columns参数?选哪个更安全
两种写法效果一样:
和
。但后者语义明确、不易误用。
实操建议:
立即学习
“
Python免费学习笔记(深入)
”;
容易手滑写成
(结果变成删行),尤其在快速复制粘贴时
参数名自带提示,IDE 补全友好,也方便后续加
或
如果要同时删行列(极少见),必须用
;日常纯删列,无脑用
删列后索引没变,但内存没立刻释放
pandas 的
默认返回新 DataFrame,原对象不动。但即使你赋值覆盖,比如
,Python 的引用计数机制和 pandas 内部缓存可能导致旧列数据暂时滞留内存。
Python 3.14.3
微软官方的 Python 扩展,是 VS Code 安装量最高的扩展(209M+)。集成 IntelliSense(通过 Pylance)、调试(通过 Python Debugger)、代码检查、格式化、重构和单元测试等功能。支持 Jupyter Notebook、虚拟环境管理和多 Python 版本切换。
下载
实操建议:
立即学习
“
Python免费学习笔记(深入)
”;
大表处理完立刻删列,紧接着调用
,能强制触发底层数据重分配,释放冗余内存
避免链式操作如
,中间对象不落地,GC 压力大;分步赋值更可控
用
对比删列前后内存占用,别只看
用正则批量删列名含特定模式的列
比如要删所有以
开头或含
的列,
本身不支持正则,得靠布尔索引配合
。
实操建议:
立即学习
“
Python免费学习笔记(深入)
”;
写法是:
注意
默认匹配子串,加
和
控制边界,否则
也会被
匹配中
正则失败时返回
,导致布尔索引出错,加参数
:
删列看着简单,真正卡住人的往往是列名大小写不一致、空格隐藏字符、或者以为删了其实只是视图——动手前先
看一眼原始名字,比查文档快。
df.drop(columns=['col1', 'col2'])'col2'KeyErrorerrors='ignore'set(['col1', 'col2']) & set(df.columns)inplace=Trueerrors='ignore'df.drop(['A', 'B'], axis=1)df.drop(columns=['A', 'B'])axis=1axis=0columns=errors=inplace=axiscolumns=dropdf = df.drop(columns=['temp'])df = df.copy()df.drop(...).drop(...).reset_index()df.info(memory_usage='deep').shape'tmp_''_bak'dropstr.contains()df.drop(columns=df.columns[df.columns.str.contains(r'^(tmp_|.*_bak$)')])str.contains()^$'report''port'NaNna=Falsedf.columns.str.contains(..., na=False)print(list(df.columns))