我有一个python程序,它使用Pandas来处理大型数据集。目前大约需要15分钟才能完成。我想记录(stdout&发送指标到Datadog)有关任务进度的信息。有没有办法获得任务(或函数)的%完成?将来,我可能会处理更大的数据集。我正在做的Python任务是对大型pandas数据框的简单分组。像这样:
dfDict = {}
for cat in categoryList:
df1 = df[df['category'] == cat]
if len(df1.index) > 0:
df1[dateCol] = pd.to_datetime(df[dateCol])
dfDict[cat] = df1
这里,categoryList有大约20000个项目,而df是一个大数据框,有(例如)500万行。
我不是在寻找任何花哨的东西(比如进步吧......)。只是完成百分比值。有什么想法吗?
谢谢!
答案 0 :(得分:0)
您可以根据需要修改以下内容。
from time import sleep
for i in range(12):
sleep(1)
print("\r\t> Progress\t:{:.2%}".format((i + 1)/12), end='')
这基本上做的是,它阻止print()
编写默认结束字符(end=''
),同时在任何事情之前编写回车符('\r'
)其他。简单来说,您将覆盖之前的print()
语句。
答案 1 :(得分:0)
天真的解决方案是只使用数据集中的总行数和您所在的索引,然后计算进度:
size = len(dataset)
for index, element in enumerate(dataset):
print(index / size * 100)
如果每行需要大约相同的时间才能完成,那么这只会有些可靠。因为你有一个大的数据集,它可能会随着时间的推移而平均,但是如果某些行需要一毫秒,而另一行需要10分钟,那么百分比将是垃圾。
还考虑将百分比四舍五入为一位小数:
size = len(dataset)
for index, element in enumerate(dataset):
print(round(index / size * 100), 1)
每行打印可能会大大降低您的任务速度,因此请考虑以下改进:
size = len(dataset)
percentage = 0
for index, element in enumerate(dataset):
new_percentage = round(index / size * 100), 1)
if percentage != new_percentage:
percentage = new_percentage
print(percentage)
当然,还有以下模块: