1. ホーム
  2. pandas

[解決済み] PandasのDataFrame apply()で全コアを使用するようにするか?

2022-04-28 05:06:49

質問

2017年8月現在、パンダ DataFame.apply() を実行すると、マルチコアマシンはその計算時間の大部分を浪費してしまうことになります。 df.apply(myfunc, axis=1) .

すべてのコアを使用して、データフレームに並行してapplyを実行するにはどうすればよいですか?

どのように解決するのですか?

を使用することができます。 swifter パッケージを使用します。

pip install swifter

(インストールされている依存関係とのバージョンの衝突を避けるために、virtualenvで使用したい場合があることに注意してください)。

Swifterはpandasのプラグインとして動作します。 apply 関数を使用します。

import swifter

def some_function(data):
    return data * 10

data['out'] = data['in'].swifter.apply(some_function)

この関数は、(上記の例のように)ベクトル化されているかどうかに関係なく、最も効率的な並列化方法を自動的に判断します。

その他の例 性能比較 をGitHubで公開しています。なお、本パッケージは現在活発に開発中であり、APIが変更される可能性があります。

また、この は自動的に動作しません を文字列カラムのために使用します。文字列を使用する場合、Swifterは "単純な "Pandasの apply これは並列化されません。この場合,強制的に dask はパフォーマンスの向上をもたらさないので、データセットを手動で分割して を使用して並列化します。 multiprocessing .