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

Polars中read_csv_batched遇字段含分隔符时的批次读取异常问题

Polars read_csv_batched 批次异常问题分析

问题描述

我尝试读取一个超3000万行、无法全量载入内存的大型CSV文件,因此使用Polars的read_csv_batched方法。但发现调用reader.next_batches(5)时,未返回指定数量的批次DataFrame,而是始终返回包含所有行的1个DataFrame(超出设定批次大小)。

最小复现示例

测试文件内容

# error.csv
a,b
"test","test"
"test","test"
"test",",,"  # 注意此处包含两个逗号
# correct.csv
a,b
"test","test"
"test","test"
"test"," ,"  # 此处仅包含一个逗号,且前面有空格

测试代码

reader_error = pl.read_csv_batched("./assets/error.csv", separator=",", batch_size=1, quote_char="\"")
batch = reader_error.next_batches(2)
print(len(batch))  # 输出1,不符合预期

reader_correct = pl.read_csv_batched("./assets/correct.csv", separator=",", batch_size=1, quote_char="\"")
batch = reader_correct.next_batches(2)
print(len(batch))  # 输出2,符合预期

环境信息

Python: 3.10
Polars: 0.20.31

问题原因

这是Polars 0.20.31版本存在的解析bug:当CSV字段包含被引号包裹的连续分隔符(比如",,")时,批处理读取的行边界检测逻辑会出现异常,无法按设定的batch_size拆分批次,只能将整个文件内容合并为一个批次返回。而当引号内的内容包含非分隔符(比如空格)时,解析逻辑能正常识别行边界,按预期拆分批次。

你的CSV文件创建没有疏漏,引号内的内容符合CSV规范,问题出在旧版本Polars的解析逻辑上。

解决方法

  • 优先升级Polars版本:这个bug在Polars后续的稳定版本中已经被修复,升级到最新版本即可解决该问题。
  • 若暂时无法升级,可尝试调整infer_schema_length参数为0(关闭schema推断的行数限制),但该方法并非完全可靠,最稳妥的方案仍是升级版本。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.22 13:17:37