Pandas DataFrame增删行列后存CSV异常:新增列未写入
解决方法
你的代码逻辑本身没问题,但可能因操作顺序的直观性不足或Pandas的副本机制细节,导致新增列未被正确保存。可以通过以下两种方式修改代码,确保新增列被写入CSV:
方法一:调整操作顺序(更直观)
先删除不需要的列,再给处理后的DataFrame新增列,最后保存。每一步的修改都清晰可见:
import pandas as pd df = pd.read_csv('TradedInstrument_20230331_real.txt', sep='\t', encoding='unicode_escape') cols_to_drop = ['stopTrdgAllag', 'stopTrdgsAllowTrdg', 'stopTrdleInTrdg', 'presholdChf', 'billentCode', 'preTradeBsholdChf', 'billinntDesc'] # 删除指定列并覆盖原DataFrame df = df.drop(columns=cols_to_drop) # 直接赋值字符串'e',Pandas会自动将其应用到所有行,无需手动生成列表 df['new_col'] = 'e' df.to_csv('output.csv', index=False)
方法二:链式调用整合操作
如果想保留原有操作逻辑,也可以把新增列的操作整合到链式调用中,避免中间变量的混淆:
import pandas as pd df = pd.read_csv('TradedInstrument_20230331_real.txt', sep='\t', encoding='unicode_escape') cols_to_drop = ['stopTrdgAllag', 'stopTrdgsAllowTrdg', 'stopTrdleInTrdg', 'presholdChf', 'billentCode', 'preTradeBsholdChf', 'billinntDesc'] # 链式执行:删列 → 新增列 → 保存 df.drop(columns=cols_to_drop).assign(new_col='e').to_csv('output.csv', index=False)
额外提示
- 无需手动生成
['e'] * len(df.index)这类列表,直接给列赋值单个字符串'e'即可,Pandas会自动将其广播到所有行,代码更简洁高效。 - 如果原代码中新增列未生效,可以在
df.drop(...)之前打印df.columns,确认new_col已被添加到DataFrame中,排查是否存在列名拼写错误或文件读取异常。
内容的提问来源于stack exchange,提问作者Patrick_Chong
相关产品推荐
相关产品推荐

