使用pandas追加数据重写CSV时如何移除自动生成的索引列
问题解决方法
问题根源
你遇到的额外索引列问题和append()的参数无关,是to_csv()方法的默认行为导致的:pandas默认会把DataFrame的内部行索引作为第一列写入CSV文件。你每次读取旧CSV时,上一次写入的索引列会被当成普通数据列加载,再次写入时又新增新的行索引列,所以会出现每次运行多一列的情况。
修正后的完整代码
import pandas as pd # 读取旧数据,直接丢弃之前误存的冗余索引列(如果存在的话) old_df = pd.read_csv('/Users/tdonov/Desktop/Python/Realestate Scraper/master_data_for_realestate.csv', usecols=lambda col: not col.startswith('Unnamed:')) # 追加新数据,ignore_index=True保留即可,避免新旧数据索引冲突 old_df = old_df.append(dataframe_for_cvs, ignore_index=True) # 写入时关闭索引写入开关,不会再额外生成索引列 old_df.to_csv('/Users/tdonov/Desktop/Python/Realestate Scraper/master_data_for_realestate.csv', index=False)
补充说明
- 你提到的id字段是非唯一的房源offer id,不影响以上逻辑,不需要将这个id设为行索引,以上代码完全兼容现有业务的重复id场景。
- 如果是首次创建CSV文件还没有历史冗余索引列,可以去掉
read_csv里的usecols参数,仅保留to_csv(index=False)即可生效。
内容的提问来源于stack exchange,提问作者tsetsko
相关产品推荐
相关产品推荐

