2016-12-04 18 views
0

我有一个函数f,我通过了两个pandas.DataFrames。我正在遍历第一个的列。它包含第二个索引值。索引是一个字符串,更具体地说是一个MD5字符串,如'1950abcbdf69bc4b6da8d950e87f538f'。我使用这些索引来检索第二个数据帧的行。下面的代码:熊猫/ Numpy(v0.19.1/v1.11.2)dataframe性能通过索引访问时的问题

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的LTS 16.04.1,VM)很细,但是由于性能问题,我移动到服务器VM(的Debian GNU/Linux的8(杰西),我需要更多的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倍甚至更多)。在代码示例中,我用“非常慢”标记了该行。它需要服务器0.094秒来执行该行。 .loc[]更慢。你能想象一个原因吗?

回答

0

一旦我写了我的问题,我已经注意到了numpy和pandas的不同版本。因此,我只是降级这两个包的版本,现在它的作品就像一个魅力。因此无论是numpy还是大熊猫,它的最新版本在这里都是越野车...