【发布时间】:2016-11-09 21:33:17
【问题描述】:
我有以下代码运行了很长时间:
my_df['result'] = my_df.apply(lambda x: my_fun(x), axis = 1)
my_df 是一个熊猫数据框,我有数百万行。有没有办法找出已经完成的工作百分比?例如在 my_fun 或某处放置打印语句?谢谢!
【问题讨论】:
标签: python python-2.7 pandas lambda
我有以下代码运行了很长时间:
my_df['result'] = my_df.apply(lambda x: my_fun(x), axis = 1)
my_df 是一个熊猫数据框,我有数百万行。有没有办法找出已经完成的工作百分比?例如在 my_fun 或某处放置打印语句?谢谢!
【问题讨论】:
标签: python python-2.7 pandas lambda
除非您正在做的事情会使您的流程与sys.stdout(罕见但合理)或sys.stderr(非常罕见但在技术上并非不可能)断开连接,否则您在my_fun 中放置打印语句的想法应该工作得很好。
当然,您将无法在my_fun 中记录进度中间表达式,例如如果my_fun 调用了一些需要很长时间的other_fun。在这种情况下,您必须将打印件放入other_fun。例如,如果您对每一行分别做某事,您可以在相关循环中的某处放置一个打印,说明已经完成了多少行,相当容易。只需保持计数,并在每次达到 1000(或 10,000 ,或 100,000 - 选择一个适合您使用的数字)。不要打印每一行 - 如果单行可以快速处理,它会变得太快而无法实际读取,并且您最终可能会在打印上花费足够的时间,这实际上会显着减慢处理速度。
如果您正在执行一项需要考虑所有数据且没有循环的单一操作...您仍然可以在函数中生成进度报告,但没有真正的方法来获得“完成的行数" 统计数据,可能会更难获得准确的百分比。
【讨论】:
my_fun到底是什么。只需...在您希望它打印某些内容的函数中的任何位置添加一个打印语句。也许给函数一个属性来保持计数,以免每次重复都打印。