3

numpy structured array整数と浮動小数点数を持つ があり、それを使用して を初期化しますpandas DataFrame

In [497]: x = np.ones(100000000, dtype=[('f0', '<i8'), ('f1', '<f8'),('f2','<i8'),('f3', '<f8'),('f4', '<f8'),('f5', '<f8'),('f6', '<f8'),('f7', '<f8')])

In [498]: %timeit pd.DataFrame(x)
The slowest run took 4.07 times longer than the fastest. This could mean that an intermediate result is being cached 

In [498]: 1 loops, best of 3: 2min 26s per loop


In [499]: xx=x.view(np.float64).reshape(x.shape + (-1,))

In [500]: %timeit pd.DataFrame(xx)
1 loops, best of 3: 256 ms per loop

上記のコードからわかるように、DataFramea を使用した の初期化structured arrayは非常に低速です。ただし、データを連続する float numpy 配列に変更すると、高速になります。しかしDataFrame、浮動小数点数と整数を混在させる必要があります。

さらにいくつかのテストを行った後、DataFrame が実際に全体をコピーしていることに気付きました(これは、初期化にフロート ビューをstructured array使用する場合には発生しません)。structured arrayここで詳細を見つけました: https://github.com/pydata/pandas/issues/9216

初期化を高速化し、コピーを回避する方法はありますか? 私は別の方法を受け入れていますが、データはstructured array.

4

0 に答える 0