大きい groupby オブジェクトを一つずつ処理する
English follows Japanese.
事象
Pandasの大きいデータセットを groupby したあとに、groupby オブジェクト内のグループを一つずつ処理しようとすると、エラー出ずに・ブルースクリーンすらならずに、PCがフリーズする。
使っているもの
Windows 10 64bit
メモリサイズ 16 GB
Python 3.8
Pandas 2.0.3
問題のgroupbyオブジェクト内には200万個以上のグループがある
ダメだったやり方
groupby_df = some_huge_dataframe.groupby(some_criteria)
for key, row in groupby_df:
do something with row
試行錯誤して成功したやり方
groupby_df = some_huge_dataframe.groupby(some_criteria)
groups = groupby_df.indices.keys()
for group in groups:
row = groupby_df.get_group(group)
do something with row
結論
どうやら、でかいgroupbyオブジェクトをforループに直接突っ込んだらダメらしく、その中のgroupのキーを一回リスト化して、キーで一つずつgroupbyから取り出さないといけなかった。
にしても、なんのエラーも出なくて何日も途方に暮れたな。。。
Issue
When iterating a groupby object using for loop, the PC just freezes without showing any errors or even the blue screen.
What I am using
Windows 10 64bit
16 GB memory
Python 3.8
Pandas 2.0.3
over 2,000,000 groups in the huge groupby object
Code causes the issue
groupby_df = some_huge_dataframe.groupby(some_criteria)
for key, row in groupby_df:
do something with row
Code does not cause the issue
groupby_df = some_huge_dataframe.groupby(some_criteria)
groups = groupby_df.indices.keys()
for group in groups:
row = groupby_df.get_group(group)
do something with row
Conclusion
Looping through a large groupby object directly may cause system crush. Looping through the keys of it, and getting the dataframe from the groupby object inside loop one by one, solves the issue.