Pandas分块读取大CSV分类写入时新内容覆盖旧内容如何解决
问题根源
你的代码出现覆盖问题的核心原因是pandas.DataFrame.to_csv的参数传参位置错误:
你想指定追加写入模式mode='a',但按pandas官方的参数顺序,to_csv的第二个参数是分隔符sep,mode属于靠后的位置参数。你直接按位置把'a'作为第二个参数传入,实际生效的是把分隔符设为了字符a,写入模式还是默认的覆盖模式mode='w',因此每处理一个新数据块都会清空之前的文件内容重新写入。
修复方案
推荐使用关键字参数指定mode,避免位置传参的混淆,同时可以增加表头写入判断,避免最终文件出现重复表头:
import pandas as pd import os def process_chunk(data): target_col = 'location_country' target_val = 'united states' filtered = data[data[target_col] == target_val] save_path = f'G:\\1\\{target_val}.csv' # 判断文件是否存在,不存在就写表头,存在就跳过表头只写数据 file_exists = os.path.exists(save_path) filtered.to_csv(save_path, mode='a', sep=',', index=False, header=not file_exists) # 分块读取大文件 chunk_iterator = pd.read_csv('G:\\gz\\4.csv', sep=',', chunksize=1000000) for df in chunk_iterator: process_chunk(df)
额外说明
- 关键字传参的写法不受参数顺序影响,后续调整参数时也不容易出错,更推荐使用
- 如果你不需要处理重复表头的问题,可以直接把原来的
'a'改成mode='a'即可解决覆盖问题,无需额外判断文件是否存在
内容的提问来源于stack exchange,提问作者jeri teri
相关产品推荐
相关产品推荐

