私は2つを渡す関数fを持っていますpandas.DataFrames
。私は最初のものの列を繰り返しています。 2番目のインデックス値が含まれます。インデックスは文字列、特に'1950abcbdf69bc4b6da8d950e87f538f'
のようなMD5文字列です。これらのインデックスを使用して、2番目のデータフレームの行を取得します。ここでは、コードがあります:Pandas/Numpy(v0.19.1/v1.11.2)データフレームのパフォーマンスインデックスでアクセスするときの問題
def f(df_A, df_B):
for row in df_A.itertuples():
hash_index=row[1]
fields_B = df_B.ix[hash_index].values # <== VERY SLOW
それは私のラップトップ(のUbuntu 16.04.1 LTS、VM)上で非常に細かい動作しますが、原因のパフォーマンスの問題、私は、サーバーVM(のDebian GNU/Linuxの8(ジェシー)、Iに移動しましたより多くのRAMが必要)。サーバが使用しています:
'3.5.2 (default, Dec 3 2016, 16:49:26) \n[GCC 4.9.2]'
numpy==1.11.2
pandas==0.19.1
を私のラップトップがあります
'3.5.2 (default, Nov 17 2016, 17:05:23) \n[GCC 5.4.0 20160609]'
numpy==1.11.1
pandas==0.18.1
最も関連性の高いデータを言及します。大きな問題は、サーバーが遅い(1000倍以上)ことです。コード例では、 "VERY SLOW"という行をマークしました。その行を実行するにはサーバーに0.094秒かかります。 .loc[]
はさらに遅かった。あなたはこれの理由を想像できますか?