如何用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
相关产品推荐
相关产品推荐

