7

以下のコードは、少なくとも関数 clip() の特定のケースでは、pandas が numpy よりもはるかに遅い可能性があることを示唆しています。驚くべきことは、numpy で計算を実行しながら、pandas から numpy へ、および pandas に戻る往復を行うことは、pandas で行うよりもはるかに高速であることです。

pandas 関数は、この回りくどい方法で実装されるべきではありませんか?

In [49]: arr = np.random.randn(1000, 1000)

In [50]: df=pd.DataFrame(arr)

In [51]: %timeit np.clip(arr, 0, None)
100 loops, best of 3: 8.18 ms per loop

In [52]: %timeit df.clip_lower(0)
1 loops, best of 3: 344 ms per loop

In [53]: %timeit pd.DataFrame(np.clip(df.values, 0, None))
100 loops, best of 3: 8.4 ms per loop
4

2 に答える 2

11

master/0.13 (まもなくリリース) では、これははるかに高速です (alignment/dtype/nans の処理のため、ネイティブの numpy よりもわずかに遅くなります)。

0.12 では列ごとに適用されていたため、これは比較的コストのかかる操作でした。

In [4]: arr = np.random.randn(1000, 1000)

In [5]: df=pd.DataFrame(arr)

In [6]: %timeit np.clip(arr, 0, None)
100 loops, best of 3: 6.62 ms per loop

In [7]: %timeit df.clip_lower(0)
100 loops, best of 3: 12.9 ms per loop
于 2013-11-07T12:39:58.440 に答える