循环python的并行化

2024-04-19 12:27:16 发布

您现在位置:Python中文网/ 问答频道 /正文

我有下面的代码…但它在每次迭代中循环并将每个数据帧存储到列表中需要一些时间。然后将此数据帧列表连接在一起。是否有一种简单快捷的方法来实现最终结果

        
        size = len(List)
        i=0 
        dfs = []
        for i in range(size):
            abc = List.iloc[i]['xyz']
            if abc.find('&')!=-1:
                abc = abc.replace('&', '%26')
            
            df = myfunction(abc)
            dfs.append(df)

2条回答

想想你的代码是做什么的。您发布的内容不完整,但我们可以推断您希望“转义”一列数据中的&字符,将该列中的每个值传递给myfunction()(您没有显示,因此我们无法优化!),并连接所有结果

第一部分对于加速比超过10倍的优化来说是微不足道的,尽管它对myfunction()部分没有帮助:

abc = List['xyz'].str.replace('&', '%26')

现在您有了一系列需要传递给myfunction()abc值。下一步:

dfs = [myfunction(x) for x in abc]

这两行代码将为您提供与原始代码相同的结果。它们是否快得多取决于你花在myfunction()上的时间占了多少(参见Amdahl's Law

几乎可以肯定的是,无论你想做什么,使用熊猫内置的选项都会更有用。在这种情况下,如果没有更多的信息,你很难知道你想要做什么。看看这个:

https://pandas.pydata.org/pandas-docs/stable/user_guide/merging.html

一般来说,对于简单的事情,您通常可以通过map避免for循环,或者在数组上使用操作

我认为,就您的时间而言,这里最有效的做法是阅读pandas文档,寻找一种简单的方法来做您想做的事情,而不是尝试并行化任何事情(通常是非平凡的)

相关问题 更多 >