You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Pandas按State列唯一值拆分大型DataFrame分块保存CSV方法

代码失效的核心原因
  • 变量名冲突:外层分块循环和内层分组循环都用i作为迭代变量,会产生变量覆盖,导致逻辑执行异常
  • 冗余错误的拼接逻辑:df = df.append(df)会把当前分块内的同州数据重复拼接一次,凭空生成一倍无效数据,且pandas 2.0+版本已经完全移除append方法,运行会直接报错
  • 文件写入模式错误:to_csv默认使用覆盖写入模式,每读取一个新分块就会把之前写入的同州文件内容清空,最终每个输出文件只会保留最后一个分块里的对应州数据,无法得到全量结果
可直接运行的修复代码
import pandas as pd
import os

source_path = "DataJune.txt"
output_folder = "tempcsv/"
# 自动创建输出目录,避免路径不存在报错
os.makedirs(output_folder, exist_ok=True)

# 记录已经写入过表头的州,避免重复写入表头
written_states = set()

# 逐块读取大文件,迭代变量使用不同命名避免冲突
for chunk_id, chunk in enumerate(pd.read_csv(source_path, sep='|', chunksize=1000000)):
    # 按当前块内的State列分组
    for state_name, state_part in chunk.groupby('State'):
        save_path = os.path.join(output_folder, f"{state_name}.csv")
        if state_name not in written_states:
            # 第一次写入该州文件:新建文件,写入表头+当前块数据
            state_part.to_csv(save_path, sep=",", index=False, mode="w", header=True)
            written_states.add(state_name)
        else:
            # 后续写入该州文件:追加模式,不写表头
            state_part.to_csv(save_path, sep=",", index=False, mode="a", header=False)
方案说明
  • 全程内存仅占用单个分块的大小,完全适配9000万行级别的大文件处理,不会出现内存溢出问题
  • 自动适配不同文件中State列的动态唯一值数量,不需要提前手动枚举州名
  • 自动兼容Windows、macOS、Linux多系统的路径格式,避免跨系统运行报错
  • 如果State列的取值包含/、\、:等文件系统不允许的特殊字符,可以在生成save_path前对state_name做字符替换,避免文件创建失败

内容的提问来源于stack exchange,提问作者user1955215

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.28 15:54:17