私は自分のコードを最適化する方法を模索していて、pandas
.at
メソッドを実行しました。 LOCへdocumentationpandas .atと.loc
高速ラベルベースのスカラーアクセサ同様
あたり、ラベルベースのスカラー検索を提供していました。これらのインデクサを使用して設定することもできます。
だから私はいくつかのサンプルを実行しました:
a
A B C D E
a A 0.444939 0.407554 0.460148 0.465239 0.462691
B 0.032746 0.485650 0.503892 0.351520 0.061569
C 0.777350 0.047677 0.250667 0.602878 0.570528
D 0.927783 0.653868 0.381103 0.959544 0.033253
E 0.191985 0.304597 0.195106 0.370921 0.631576
が.at
と.loc
を使用すると私は同じこと
import pandas as pd
import numpy as np
from string import letters, lowercase, uppercase
lt = list(letters)
lc = list(lowercase)
uc = list(uppercase)
def gdf(rows, cols, seed=None):
"""rows and cols are what you'd pass
to pd.MultiIndex.from_product()"""
gmi = pd.MultiIndex.from_product
df = pd.DataFrame(index=gmi(rows), columns=gmi(cols))
np.random.seed(seed)
df.iloc[:, :] = np.random.rand(*df.shape)
return df
seed = [3, 1415]
df = gdf([lc, uc], [lc, uc], seed)
print df.head().T.head().T
df
セットアップが見えます3210 print "using .loc", df.loc[('a', 'A'), ('c', 'C')]
print "using .at ", df.at[('a', 'A'), ('c', 'C')]
using .loc 0.37374090276
using .at 0.37374090276
print "using .loc", df.loc[('a', 'A'), ('c', 'C')]
print "using .at ", df.at[('a', 'A'), ('c', 'C')]
using .loc 0.37374090276
using .at 0.37374090276
試験速度これは、巨大な高速化になりそうだ.at
%%timeit
df.at[('a', 'A'), ('c', 'C')]
The slowest run took 6.11 times longer than the fastest. This could mean that an intermediate result is being cached.
100000 loops, best of 3: 8 µs per loop
を使用して.loc
%%timeit
df.loc[('a', 'A'), ('c', 'C')]
10000 loops, best of 3: 180 µs per loop
試験速度を使用しました。でもキャッシング段階6.11 * 8
で180
質問.at
の制限は何
よりもはるかに高速ですか?私はそれを使う意欲がある。ドキュメントには.loc
と似ていますが、同様の動作はしません。例:意図は似ているとされていても
TypeError: unhashable type
でprint sdf.at[:, :]
結果ではないと同じ
# small df
sdf = gdf([lc[:2]], [uc[:2]], seed)
print sdf.loc[:, :]
A B
a 0.444939 0.407554
b 0.460148 0.465239
。
つまり、誰が.at
メソッドで行うことができ、できないことに関する指導を提供できますか?
バージョン0.21.0以降、 'get_value'は非推奨です。 – Cleb