Pandas 当使用iterator=True时,如何获得Dataframe的总行数

Pandas 当使用iterator=True时,如何获得Dataframe的总行数,pandas,Pandas,我处理的是不适合内存的大文件,因此我使用Pandas的Dataframe的迭代器功能,每次处理单个块 pd.read_csv(csv_file_name, encoding='utf-8', chunksize=chunk_size, iterator=True, engine='c', error_bad_lines=False, low_memory=False) 在处理过程中,我想打印已处理行的数量以

我处理的是不适合内存的大文件,因此我使用Pandas的Dataframe的迭代器功能,每次处理单个块

pd.read_csv(csv_file_name, encoding='utf-8', chunksize=chunk_size, iterator=True,
                                            engine='c', error_bad_lines=False, low_memory=False)
在处理过程中,我想打印已处理行的数量以及已处理行占总行数的百分比

要获取我正在使用的Pandas数据帧中的行总数

len(df.index)
但是当我试着用它的时候,当我用iRator的时候

AttributeError: 'TextFileReader' object has no attribute 'index'

有办法吗?(虽然不检查每个块)

我将使用两种可能的解决方法:

  • 使用
    columns
    选项,只需一列即可读入文件。它可能足够小,您可以一次读取,但如果不遍历它,则可以计算行数

  • 使用linux命令
    wc-l
    计算行数。如果你有一个标题,你需要删除一个。 e、 g


  • 在处理数据块之前,您不会知道错误行,因此最多只能得到最终总数的估计值。如果估计值足够好,不妨打印csv中的行数:看看是否需要帮助。Kent Shikama的评论链接到一个问题,其中有一些比我更好的建议:-)我对他的评论投了赞成票。
    wc_output = subprocess.run(['wc','-l', 'csv_file_name'])
    # wc_output.stdout will be of format ` N_lines filename`
    # subtract 1 to remove header
    n_rows = int(wc_output.stdout.split()[0]) - 1