You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Pandas删除DataFrame列代码失效,求排查问题原因

问题分析与修复方案

嘿,我一眼就揪出问题啦!你的代码逻辑思路没问题,但忽略了Pandas中drop()方法的一个关键特性——它默认不会直接修改原DataFrame,而是返回一个删除指定列后的新DataFrame对象。

问题根源

当你执行df.drop([col], axis=1)时,Pandas确实完成了删除列的操作,但这个操作的结果只是一个临时的新DataFrame,你既没有把它重新赋值给df,也没让它直接修改原数据。所以循环跑完后,原df完全没变化,最后导出的out.csv自然和原文件一模一样。

两种修复方法

方法一:使用inplace=True参数直接修改原DataFrame

这个参数会让drop()方法直接在原DataFrame上执行删除操作,不需要额外赋值:

import pandas
df = pandas.read_csv('data.csv')
for col in df.columns.values:
    if input('Delete ' + col + '? yes/no') == 'yes':
        df.drop([col], axis=1, inplace=True)  # 新增inplace=True参数
df.to_csv('out.csv')

方法二:将drop()的返回值重新赋值给df

如果你不想修改原数据(虽然这里你需要修改),可以把删除后的新DataFrame重新赋值给df:

import pandas
df = pandas.read_csv('data.csv')
for col in df.columns.values:
    if input('Delete ' + col + '? yes/no') == 'yes':
        df = df.drop([col], axis=1)  # 把新对象赋值回df
df.to_csv('out.csv')

额外小提示

你这里用df.columns.values获取初始列列表来循环是没问题的,因为它是循环开始前就固定的列名集合。要是你循环时用for col in df.columns(动态获取当前列),边删边遍历可能会导致某些列被跳过,这点以后可以留意下~

内容的提问来源于stack exchange,提问作者Vincent W.

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.14 08:50:11