こんばんは sohnishi です。
先日、とても遅いのpandasqlを修正する機会がありました。
AWS lambdaで動かしていたので、処理時間は15分が最大です。
余裕でタイムアウト食らってました。
データ形式はcsvでデータ量は30万件です。
10万件をpandasqlでselectallするだけで動きません。。
pandasqlでも頑張れば動くんでしょうけど、
たかが10万件のselectallが動かない時点で使う気にもならないので、
pandasqlを使わずになんとかならないかと思いました。
そもそもsqlを使わずとも簡単にデータ分析が行えるのがpandasの特徴です。
仕様は下記のようなものでした。
・30万件.csvのデータから削除リスト.csvに載っているデータを削除する
処理は下記のようなものでした。
・30万件.csvと削除リスト.csvをdataFrame型に変換し、
pandasqlで削除リスト.csvのデータを30万件.csvのデータから省いてselectし、csvに再出力する
上記処理のpandasql実行部分がうんともすんとも言いません。
pandasqlを全撤廃し、
下記のようにdataFrame型から直接dropメソッドで該当データを削除するように変更することで、
30万件 * 20ファイルでも問題なく動作するようになりました。
1 2 |
for i in range(0,len(del_df)): df = df.drop(list(df[(df["カラム1"] == del_df[i, "hoge"]) & df["カラム2"] == del_df[i, "hoge2"])].index)) |
pandasが慣れないうちはpandasqlも良いかもしれませんが、
pandasにはとても便利なメソッドがたくさん用意されています。
パフォーマンスに苦しまないように、みなさんメソッドを有効活用しましょう〜
それでは。