如何用Python在CSV中新增列并保持分隔符数量不变?
实现:给DataFrame新增左侧列并保持CSV分隔符数量不变
我们有一个由Python生成的DataFrame,转换为CSV后以|作为分隔符,原CSV包含9个分隔符(对应10列)。
原CSV内容
Date|ID|CD|BIN|INTRNL|PCC|IND|CENTRE|TRANS|ENTITY 20221231|APPLE|10004050|BCH_dummy|3505|N|Y|Y|6310| 20221231|APPLE|10004050|BCH_MOTOR|3502|N|Y|Y|6310|
对应的原DataFrame
Date ID CD BIN INTRNL PCC IND CENTRE TRANS ENTITY 20221231 APPLE 10004050 BCH_dummy 3505 N Y Y 6310 20221231 APPLE 10004050 BCH_MOTOR 3502 N Y Y 6310
需求
要在Date列左侧新增名为BDR2的列,同时保证生成的CSV中分隔符数量仍为9(即最终CSV仍保持10列结构)。预期输出的CSV如下:
BDR2|Date|ID|CD|BIN|INTRNL|PCC|IND|CENTRE|TRANS|ENTITY 20221231|APPLE|10004050|BCH_dummy|3505|N|Y|Y|6310| 20221231|APPLE|10004050|BCH_MOTOR|3502|N|Y|Y|6310|
解决方案代码
# 在最左侧插入空值的BDR2列 df.insert(0, column="BDR2", value='') # 将所有列向右移位,丢弃原最右侧无数据的ENTITY列 df = df.shift(-1, axis=1) # 替换移位产生的nan为空字符串 df.replace("nan", '', inplace=True) # 导出为指定路径的CSV,指定分隔符且不包含索引 df.to_csv(r"C:\INPUT\df_sample_test.csv", sep='|', index=False)
代码说明
df.insert(0, column="BDR2", value=''):在DataFrame第0位插入新列BDR2,初始值为空,此时DataFrame临时变为11列df.shift(-1, axis=1):对列执行右移操作,原最右侧的ENTITY列(无有效数据)被丢弃,DataFrame回到10列结构df.replace("nan", '', inplace=True):处理移位后产生的空值标记,替换为空字符串保证格式统一df.to_csv(...):按要求导出CSV文件,使用|作为分隔符,不写入索引列
内容的提问来源于stack exchange,提问作者SGC
相关产品推荐
相关产品推荐

