为什么Pandas read_CSV即使iterator=False也返回TextFileReader?

为什么Pandas read_CSV即使iterator=False也返回TextFileReader?,pandas,jupyter-notebook,jupyter-lab,timeit,Pandas,Jupyter Notebook,Jupyter Lab,Timeit,环境: python:3.7.10.final.0, python位:64, 操作系统:Windows,64GB内存, 操作系统版本:10, 版本:10.0.19041, 熊猫:1.2.4 我有一个非常简单的read语句,在一个简单的print语句之后,有条件地检查我是否确实想读取整个文件 %timeit csvDataFrame=pd.read_csv(fc.selected,sep=“,”,header='expert',na_values='?',skiprows=csvSkipRows=

环境: python:3.7.10.final.0, python位:64, 操作系统:Windows,64GB内存, 操作系统版本:10, 版本:10.0.19041, 熊猫:1.2.4

我有一个非常简单的read语句,在一个简单的print语句之后,有条件地检查我是否确实想读取整个文件

%timeit csvDataFrame=pd.read_csv(fc.selected,sep=“,”,header='expert',na_values='?',skiprows=csvSkipRows=csvSkipRows,dtype=desiDtypesDict,comment='#',iterator=False)

其中fc.selected是约200万行(磁盘上524MB)CSV的完整路径;csvSkipRows=[]和desiDtypesDict是数据集中列的类型说明

如果我还添加(例如,
chunksize=10
)并对结果进行迭代,那么CSV读取效果很好,因此我对参数很有信心,但是当我尝试一次读取整个文件时

  • %timeit告诉我,它用了~6s/圈,共有7个圈
  • csvDataFrame不是数据帧,而是TextFileReader
即使迭代器=False 在这种环境中,Python通常可以访问大量内存,因此:


为什么会发生这种情况,以及我如何一次读取所有CSV?为什么会发生这种情况?%time它与熊猫的互动异常*

如何一次读取所有CSV?忽略%timeit

一个新内核和一个小的修改之后,我们发现问题是由于把%timeit放在read_csv之前

删除它,总时间是相同的,但现在返回一个数据帧,2684511行×31列,这与预期和期望的一样

建议:在推断确实存在问题之前,始终使用最少的代码进行测试

*到底是什么样的互动我不知道。。。也许其他人会

完整单元代码为:

# Read all at once.
print(readCSVAllAtOnce)

if readCSVAllAtOnce:
    %timeit csvDataFrame = pd.read_csv(fc.selected, sep=",", header='infer', na_values ='?', skiprows=csvSkipRows, dtype=desiDtypesDict, comment = '#', iterator=False, chunksize=None)