見出し画像

大きい 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.

この記事が気に入ったらサポートをしてみませんか?