跳转到主内容
极星编程网:以代码为星,赴技术山海!

Python如何删除多余列数据_Pandas的drop函数实战

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

相关文章