使用iterator = True时如何获取Pandas Dataframe的总行数

时间:2019-10-28 10:42:26

标签: pandas

我正在处理内存中无法容纳的大文件,因此我正在使用Pandas数据框的迭代器功能,并且每次都处理单个块。

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)

但是在尝试使用ierator时尝试使用它

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

有什么办法吗? (同时不遍历每个块)

1 个答案:

答案 0 :(得分:0)

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

  1. 使用columns选项,仅读取一列即可读取文件。可能足够小,您可以一口气读取它,但如果不进行迭代,就可以计算行数。

  2. 使用linux命令wc -l来计算行数。如果您有标题,则需要将其删除。 例如

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