【问题标题】:multithreading for data from dataframe pandas数据帧熊猫数据的多线程
【发布时间】:2016-09-15 16:16:04
【问题描述】:

我正在努力使用多线程来计算购物篮上有不同购物项目的客户列表之间的相关性。所以我有一个包含 1000 个客户的 pandas 数据框,这意味着我必须计算 100 万次相关性,这需要很长时间来处理

数据框的示例如下所示:

  ID     Item       
    1    Banana    
    1    Apple     
    2    Orange    
    2    Banana    
    2    Tomato    
    3    Apple     
    3    Tomato    
    3    Orange    

这是代码的简化版本:

import pandas as pd

def relatedness (customer1, customer2):
    # do some calculations to measure the relation between the customers

data= pd.read_csv(data_file)
customers_list= list (set(data['ID']))

relatedness_matrix = pd.DataFrame(index=[customers_list], columns=[customers_list])
for i in customers_list:
    for j in customer_list:
        relatedness_matrix.loc[i,j] = relatedness (i,j)

提前致谢!

【问题讨论】:

  • 有点不清楚你在问什么。您是否认为多线程会使其足够快以至于不再“花费太长时间”?您需要多快?
  • 我不确定我是否使用了正确的术语。但我需要的是一次在for循环中做尽可能多的项目,以减少处理时间。谢谢x
  • 您可以在此处stackoverflow.com/questions/2846653/… 获得有关 Python 线程的一些指示,但由于全局解释器锁定,Python 中的线程通常不会提高效率。加快速度的最佳选择是用 C 或 C++ 重写耗时的函数,并将它们编译成 Python 模块,该模块的运行速度比 Python 原生代码快得多。

标签: python multithreading dataframe bigdata


【解决方案1】:

正在寻找关于使用 pandas DataFrame 进行大量计算的相同问题并发现

DASK http://dask.pydata.org/en/latest/

(来自这个 SO https://datascience.stackexchange.com/questions/172/is-there-a-straightforward-way-to-run-pandas-dataframe-isin-in-parallel

希望对你有帮助

【讨论】:

    【解决方案2】:

    查看 Modin:“Modin 提供了与现有 pandas 代码的无缝集成和兼容性。即使使用 DataFrame 构造函数也是相同的。” https://modin.readthedocs.io/en/latest/

    【讨论】:

    • Numba,在尝试了 Modin 之后,我会选择 JIT 编译器。您可能需要转换为 np 数组,这不会太贵。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-10-15
    • 1970-01-01
    • 2018-01-05
    • 1970-01-01
    • 2013-12-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多