大きい 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.
この記事が気に入ったらサポートをしてみませんか?