使用pandas处理大型CSV文件时如何完全保留原始文件格式
解决方案
你只需调整pandas.to_csv的输出参数即可解决格式问题,全程使用pandas优化过的IO接口,不会额外增加运行耗时,完全满足大文件处理的性能要求:
核心修改点
- 导入标准库
csv,用于配置输出引号规则 - 给
to_csv新增2个参数:quoting=csv.QUOTE_NONNUMERIC:所有非数值类型的字段输出时自动包裹双引号,完美匹配原始文件的日期、字符串列格式na_rep='NAN':将pandas识别到的空值统一输出为NAN,配合上面的引号规则,自动生成带双引号的"NAN"
- (可选优化)读取大文件时增加
chunksize参数分块处理,降低内存峰值,避免大文件加载失败,处理速度几乎不受影响
修改后的完整代码
import pandas as pd import csv # 可选:分块读取大文件,chunksize可根据内存调整,示例为一次读10万行 chunk_list = [] for chunk in pd.read_csv(in_file, skiprows=[0,2,3], chunksize=10**5): # 逐块执行数据转换 processed_chunk = foobar(chunk) chunk_list.append(processed_chunk) df = pd.concat(chunk_list, ignore_index=True) # 读取表头逻辑保持不变 with open(in_file, 'r') as fi: header = [next(fi) for x in range(4)] # 写入表头逻辑保持不变 with open(out_file, 'w') as fo: for i_line in header: fo.write(i_line) # 仅调整to_csv的参数即可 df.to_csv( out_file, header=False, index=False, mode='a', quoting=csv.QUOTE_NONNUMERIC, na_rep='NAN' )
补充说明
如果原始数据中存在本身包含双引号的字段,可额外增加doublequote=True参数(默认已开启),会自动将字段内的双引号转义为两个双引号,完全兼容CSV标准格式。
内容的提问来源于stack exchange,提问作者Antoine T
相关产品推荐
相关产品推荐

