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

Python3分割大CSV时chunksize未从首行开始问题求助

嘿,我来帮你捋清楚这个问题的根源,以及怎么解决它~

问题原因分析

你遇到的两个核心问题其实都是对pandas read_csv的参数逻辑理解偏差导致的:

  1. chunksize返回迭代器,而非直接DataFrame
    当你设置chunksize时,pd.read_csv()不会直接返回整个数据集,而是返回一个TextFileReader迭代器。如果直接把这个迭代器拿去存成CSV,它会遍历所有的chunk块,最后只保留并写入最后一个chunk的数据——这就是为什么你第一段代码总是拿到最后500行的原因。

  2. skiprows的行为误解
    你的CSV应该是带表头的吧?如果设置skiprows=500,pandas会直接跳过文件的前500行(包括第一行的表头),然后把第500行当成新的表头来读取,这显然和你“跳过前500行数据、保留表头”的需求完全不符。

正确的代码实现

第一段:提取前500行数据(含表头)

我们需要手动获取迭代器的第一个chunk,这才是你要的前500行数据:

import pandas as pd

# 获取迭代器,chunksize=500表示每个chunk包含500行数据
chunk_iterator = pd.read_csv(r'file.csv', index_col=None, header='infer', encoding='ISO-8859-1', chunksize=500)
# 取第一个chunk(前500行数据,列名沿用原表头)
first_500_rows = next(chunk_iterator)
# 保存到新文件,index=False避免写入默认索引列
first_500_rows.to_csv('first_file.csv', index=False, encoding='ISO-8859-1')

第二段:跳过前500行数据,读取剩余2500行

这里我们要精准跳过表头之后的500行数据,同时保留原表头,用skiprows指定要跳过的行范围,再用nrows限制读取行数:

# 跳过第1到第500行(第0行是表头),读取接下来的2500行
remaining_2500_rows = pd.read_csv(
    r'file.csv',
    index_col=None,
    header='infer',
    encoding='ISO-8859-1',
    skiprows=range(1, 501),  # 跳过表头后的500行数据
    nrows=2500
)
remaining_2500_rows.to_csv('second_file.csv', index=False, encoding='ISO-8859-1')

额外小提示

如果你的CSV没有表头,那skiprows的逻辑要调整:直接用skiprows=500,同时设置header=None,这样就会跳过前500行,读取后续的2500行。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 03:29:08