簡體   English   中英

針對 Pandas DataFrame 上的 200K 行迭代優化 Python 腳本

[英]Optimizing Python script for 200K row iteration over pandas DataFrame

我編寫了下面的代碼來迭代數據幀(df_final_exheader),獲取文件路徑並從相應的圖像中讀取元數據。 在這一點上感覺比它需要的要慢,但我很難找到解決方案(我有非程序員背景,可能缺乏基本知識)。

如果我是正確的,問題之一是使用.iterrows循環遍歷數據,閱讀指南我認為我需要實現矢量化,但我不知道如何選擇它。 有人可以在正確的方向上輕輕推動我嗎?

def read_dicom_header(input_dir_im, df_final_exheader):
        i = 0
        for row,index in df_final_exheader.iterrows():
    
            ds = dicom.dcmread(os.path.join(input_dir_im,df_final_exheader.loc[row, 'path']))
            
            header_dict = {'kVp':[0x18,0x60],'uAs':[0X18,0x1153],'EI':[0x18,0x1411],'DAP':[0x18,0x115E],'REX':[0x18, 0x1405]}
            
            for key, val in header_dict.items():
    
                try:
                    df_final_exheader.loc[row, key] = ds[[hex(x) for x in val]].value
                except KeyError:
                    df_final_exheader.loc[row, key] = 'na'
            
            i+=1
            if i%500==0:
                print(row)
                        
        return df_final_exheader

在這種情況下,我似乎誤解了矢量化的相關性。 當前版本正在運行,當它完成時我會調整它,看看可以進行多大程度的改進。

跟進; 我終於有時間在 timeit 下運行一些變體;

  • 原始代碼; 2.654 秒。

  • 字典按照@roganjosh 的建議移動; 2.618 秒。

  • 排除@Cammeron Riddle 建議的像素數據; 2.340 秒。

總結; 原始腳本運行了 48 小時,經過修改,這本可以改進為 42 小時。

再次; 感謝大家的意見和建議!:)

暫無
暫無

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

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