2016-11-09 53 views
0

我有下面的代碼它運行很長一段時間:的Python:跟蹤作業的百分比處理

my_df['result'] = my_df.apply(lambda x: my_fun(x), axis = 1) 

my_df是大熊貓的數據幀,我有幾百萬行的。有沒有辦法找出工作完成的比例?例如在my_fun或某處放置打印語句?謝謝!

回答

0

除非你正在做的事情會從sys.stdout(罕見的,但合理的)或sys.stderr(顯著罕見,但技術上仍然不是不可能的)斷開你的過程中,你的只是把打印語句在my_fun想法應該只是罰款。

當然,您將無法在my_fun中記錄進度中間表達式,例如my_fun調用某些需要很長時間的other_fun。在這種情況下,您必須將打印件放入other_fun。例如,如果您正在分別對每行進行一些操作,則可以在相關循環中的某個位置放置一個打印文件,說明已經完成了多少行,相當容易。只要保持計數,並打印數字(如果你使用sys.stdout作爲其他東西),每打出一個數字(可能爲sys.stderr或記錄器,而不是sys.stdout),每次碰到1000的倍數(或10,000或100,000)號碼,供您使用)。不要打印每一行 - 如果單行快速處理,它會模糊得太快而無法真正閱讀,並且最終可能花費足夠的時間來打印,實際上會減慢處理的速度。

如果你正在做一個單一的操作,需要考慮所有的數據,沒有循環......你仍然可以在函數中做進度報告,但沒有真正的方法來獲得「行數完成「的統計數據,並且要獲得準確的百分比可能會更困難。

+0

你能提供一個例子如何在my_fun()中打印進度的百分比?由於它被lambda調用,我不知道它是如何跟蹤整個工作進度的...... – Edamame

+0

不是更具體地知道'my_fun'實際上是什麼。只是...在你希望它打印什麼的函數的任何點添加一個打印語句。也許給該函數一個屬性以保持計數,以便在每次重複時不打印。 –