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

如何用Pandas的read_csv读取CSV后删除多列并保存新文件?

问题原因

你的代码只删除最后一列,是因为Pandas的drop()方法默认不会修改原DataFrame,而是返回一个删除列后的新对象。前面几次调用df.drop()都没有将结果赋值回df,也没有使用inplace=True参数,所以这些删除操作完全没有生效,只有最后一次drop()后直接链式调用to_csv(),才会把仅删除最后一列的结果保存。

解决方案

推荐以下几种写法,任选其一即可:

方案1:一次性删除多列(最简洁高效)

一次性传入所有要删除的列名列表,避免重复操作:

import pandas as pd
df = pd.read_csv('TradedInstrument_20230331_real.csv', sep='\t', encoding='unicode_escape')
# 去重后列名列表
cols_to_drop = [
    'stopTrdgAllowedInOpnFlag',
    'stopTrdgsAllowableInTrdg',
    'preTradeBlockThresholdChf',
    'billingSegmentCode',
    'billingSegmentDesc'
]
df.drop(columns=cols_to_drop, inplace=True)
df.to_csv('output.csv', index=False)

方案2:每次删除后赋值回原DataFrame

每次调用drop()后,将返回的新对象重新赋值给df:

import pandas as pd
df = pd.read_csv('TradedInstrument_20230331_real.csv', sep='\t', encoding='unicode_escape')
df = df.drop(columns='stopTrdgAllowedInOpnFlag')
df = df.drop(columns='stopTrdgsAllowableInTrdg')
df = df.drop(columns='preTradeBlockThresholdChf')
df = df.drop(columns='billingSegmentCode')
df = df.drop(columns='billingSegmentDesc')
df.to_csv('output.csv', index=False)

方案3:使用inplace=True直接修改原DataFrame

在每次drop()时添加inplace=True参数,直接在原DataFrame上执行删除操作:

import pandas as pd
df = pd.read_csv('TradedInstrument_20230331_real.csv', sep='\t', encoding='unicode_escape')
df.drop(columns='stopTrdgAllowedInOpnFlag', inplace=True)
df.drop(columns='stopTrdgsAllowableInTrdg', inplace=True)
df.drop(columns='preTradeBlockThresholdChf', inplace=True)
df.drop(columns='billingSegmentCode', inplace=True)
df.drop(columns='billingSegmentDesc', inplace=True)
df.to_csv('output.csv', index=False)

注意:你的代码中重复删除了preTradeBlockThresholdChf列,建议去掉重复操作,避免冗余。

内容的提问来源于stack exchange,提问作者Patrick_Chong

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.26 02:05:06