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

pandas.DataFrame及from_records的data参数是否支持延迟求值?

Pandas DataFrame构造函数与from_records的data参数是否支持延迟求值?

直接给结论

不管是pandas.DataFrame()的构造函数,还是DataFrame.from_records()类方法,它们的data参数都不支持延迟求值。只要你传入生成器这类可迭代对象,它们会立刻把整个迭代器的数据全部读完,不会留到需要的时候再逐行读取。

你的测试已经给出了答案

你自己做的测试案例完美验证了这一点:

>>> g = ((x, x+1) for x in range(5))
>>> d = pandas.DataFrame.from_records(g)
>>> next(g)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
StopIteration

调用from_records(g)之后,生成器g已经被彻底消耗光了,再调用next(g)自然就抛出了StopIteration。这说明Pandas在执行这个方法的时候,是一次性把迭代器里所有数据都加载到内存里生成DataFrame,完全没有做延迟求值的处理。

对大型数据集的影响

正如你担心的,这种立即求值的方式在处理大型InputDataSet时会有扩展性问题:

  • 虽然InputDataSet.iterrows()本身是逐行返回的迭代器,但一旦把它传给from_records(),Pandas就会一次性把所有行都读进内存,没法实现你想要的“逐行按需读取”的流式处理。
  • 如果数据集太大,很容易直接把内存撑爆,根本没法处理。

如果你需要流式处理的话

如果要处理超大型数据集,实现类似延迟加载的效果,可以试试这些办法:

  • 用Pandas自带的IO工具,比如pandas.read_csv(),它支持chunksize参数,可以分块读取数据,每次只处理一小部分;
  • 针对自定义数据源,自己写分块迭代的逻辑,每次生成一小批数据来构造DataFrame处理,避免一次性加载全量数据。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 07:45:26