当DataFrame正在初始化时,如何创建一个进度条?
当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%的进度条。
在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=True
和chunksize=1
是等效的。
总体而言,pandas适用于探索小规模(最大16GB或内存大小)的大型数据样本,一旦提出假设,就可以运行Spark作业。如果read_csv
的执行时间超过30分钟,就需要考虑其他解决方案。
关于评论中提到的问题,这与原始问题和答案无关。如果有其他问题,应该创建新的帖子,因为Stackoverflow不是论坛。有人希望在读取CSV文件时显示进度条,原因可能是CSV文件太大,与美观不符。目前,我们需要在迭代每个块大小时手动构建进度条。
参考链接:[stackoverflow.com/questions/18603270/…](https://stackoverflow.com/questions/18603270)