首页 > 解决方案 > 如何加快熊猫数据框迭代

问题描述

我们在项目中使用了 pandas 数据框,我们意识到由于 pandas 数据框的计算速度很慢,我们的程序非常慢。我与您分享了我们的代码。

   df_item_in_desc = pd.DataFrame(columns = df.columns) # to hold all satisfied results
    
    for index in df.shape[0]:
        s1 = set(df.iloc[index]['desc_words_short'])
    
        if item_number in s1:   
            df_item_in_desc = df_item_in_desc.append(df.iloc[index])

我们检查是否项目名称在另一列中,desc_words_short然后我们将该行附加到另一个数据框(df_item_in_desc)。这是一个简单的逻辑,但要获得这样的行,我们应该遍历所有数据帧并检查该条件。我们的数据框有点大,运行此代码需要更多时间。我们怎样才能加快这个过程,我们可以Cpu parallelization在这个任务中使用,还是别的什么?

注意:我们实际上尝试了 Cpu 并行化,但不会成功。

标签: pythonpandasmultiprocessing

解决方案


所以看起来你正在遍历每一行并查看desc_words_short列的值。对于每个值,如果该值(可能是列表)包含item_number,那么您希望将该行添加到df_item_in_desc.

如果这是目标,您可以像这样加快速度:

import pandas as pd

item_number = 'a'
df = pd.DataFrame({'desc_words_short':[['a','a','b'],['b','d'],['c','c']]})

print(df)

  desc_words_short
0        [a, a, b]
1           [b, d]
2           [c, c]

mask = df['desc_words_short'].apply(lambda x: item_number in x)
df_item_in_desc = df.loc[mask]

print(df_item_in_desc)

  desc_words_short
0        [a, a, b]

我不确定重点set是什么,就像item_number在完整列表或集合中一样,所以这是一个毫无意义的额外计算


推荐阅读