python pandasのDataFrameをいい感じにmultiprocessingで並列処理する

pandasのDataFrameに文字列データとかを入れてるとなんとなく並列処理したくなります。そんな時のTips

とりあえずデータを作る

データを等分割して並列化する

各行が独立していて、計算処理を分割した各行に実行したい場合。

numpyのarray_splitはDataFrameを入れても均等に分割してくれます。それを利用して均等にDataFrameを分割して並列化します。

今回は普通に各行のcountを3倍する計算を並列化してみます。

データをキーごとに分割する

例えばanimalの種類ごとに並列化したい場合(map reduceによくある感じ)、下記のようにDataFrameを指定カラムの種類ごとに分割して並列化できます。

 

各行を3倍する処理を並列化するというpandasのメソッドを使えば一発で終わりそうな処理を並列化してみましたがこれが複雑な自然言語処理とかになるとpandasの関数だけではまかなえなくなり、イテレーションすることになると思います。そんなときに処理をこんな感じで並列化すれば、格段に処理が早くなります。