簡體   English   中英

並行化循環python

[英]Parallelize for loop 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)

幾乎可以肯定,使用 Pandas 內置的選項對於您想做的任何事情都會更有用。 在這種情況下,如果沒有更多信息,很難知道您想做什么。 看看這個:

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

通常,對於簡單的事情,您通常可以通過 map 或對數組使用操作來完全避免 for 循環。

我認為,就您的時間而言,在這里最有效的做法更有可能是通讀 pandas 文檔,以一種簡單的方法來做您想做的事情,而不是嘗試並行化任何事情(通常是非平凡的)。

想想你的代碼做了什么。 您發布的內容不完整,但我們可以推斷您想“轉義”一列數據中的&字符,將該列中的每個值傳遞給myfunction() (您尚未顯示,因此我們不能優化!),並連接所有結果。

第一部分是微不足道的優化超過 10 倍的加速,雖然它不會幫助myfunction()部分:

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

現在您有一系列需要傳遞給myfunction()abc值。 下一個:

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

這兩行代碼將為您提供與原始代碼相同的結果。 它們是否快得多取決於你花在myfunction()上的時間的myfunction() (參見阿姆達爾定律)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM