【Python】MemoryErrorが発生するとき

小技をちょこちょこと。メモリ買い足せばいいんだけど、そうはいかないとき。大きいデータを扱うとき。

要素の削除

del df

gc開放

import gc
gc.collect()

dfplyだとメモリあふれやすい。

win5_predict = win5_predict >> \
                   mutate(PRED_MULTI=X.PRED_1 * X.PRED_2 * X.PRED_3 * X.PRED_4 * X.PRED_5)

dfplyを使わないで済む方法があれば。以下の方が早いしメモリ溢れない。

win5_predict["PRED_MULTI"] = win5_predict["NINKI_1"] * win5_predict["NINKI_2"] * win5_predict["NINKI_3"] * \
                            win5_predict["NINKI_4"] * win5_predict["NINKI_5"]

dataframeは可能な限りnumpy配列にする。numpy配列の方が効率性がいいらしい。

# pandas.DataFrameの場合
a_df = df.values

# pandas.Seriesの場合
a_s = s.values

メソッドチェーンを避ける。

# メソッドチェーンで繋げる場合はメモリ喰う
train_x = train_data.drop(columns=drop_columns).reset_index(drop=True).values

# メソッドチェーンを避けた方がメモリ喰わない
train_x = train_data.drop(columns=drop_columns)
train_x = train_x.reset_index(drop=True)
train_x = train_x.values

# さらに言うと、この場合はtrain_dataの容量が大きいので、train_data自体を小さくしてからtrain_xを作った方がいい
train_data = train_data.drop(columns=drop_columns)
train_data = train_data.reset_index(drop=True)
train_x = train_data.values

コメント