当DataFrame正在初始化时,如何创建一个进度条?

10 浏览
0 Comments

当DataFrame正在初始化时,如何创建一个进度条?

每次将.csv文件加载到数据框中时,我想要得到新创建的行数:

def file_len(fname):
    with open(fname) as f:
        for i, l in enumerate(f):
            pass
    return i + 1
csv_path = "C:/...."
max_length = file_len(csv_path)
data = read_csv(csv_path, sep=';', encoding='utf-8')

通过这段代码,我可以得到最大行数,但我不知道如何得到每次创建数据框时的行数。

我想用它们制作一个0-100%的进度条。

0
0 Comments

在pandas中,无法在DataFrame初始化时创建进度条,因为需要修改read_csv函数和其他一些函数。但是,通过使用chunksize=rows_number参数,可以实现这个功能。以下是一个示例代码:

import pandas as pd
from StringIO import StringIO
data = """A,B,C
foo,1,2,3
bar,4,5,6
baz,7,8,9
"""
reader = pd.read_csv(StringIO(data), chunksize=1)
for x in reader:
    print x
    print '--- next data ---'

输出结果如下:

     A  B  C
foo  1  2  3
--- next data ---
     A  B  C
bar  4  5  6
--- next data ---
     A  B  C
baz  7  8  9
--- next data ---

可以通过迭代read_csv(...chunksize=10)来实现进度条效果,但这样并不高效。可以尝试使用iterator=True参数,但是可能需要更多的行数才能正常工作。此外,iterator=Truechunksize=1是等效的。

总体而言,pandas适用于探索小规模(最大16GB或内存大小)的大型数据样本,一旦提出假设,就可以运行Spark作业。如果read_csv的执行时间超过30分钟,就需要考虑其他解决方案。

关于评论中提到的问题,这与原始问题和答案无关。如果有其他问题,应该创建新的帖子,因为Stackoverflow不是论坛。有人希望在读取CSV文件时显示进度条,原因可能是CSV文件太大,与美观不符。目前,我们需要在迭代每个块大小时手动构建进度条。

参考链接:[stackoverflow.com/questions/18603270/…](https://stackoverflow.com/questions/18603270)

0