亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

我怎樣才能讓這個 python 程序運行得更快?

我怎樣才能讓這個 python 程序運行得更快?

牧羊人nacy 2021-11-30 15:36:34
我是 python 和 pandas 的新手,我設法做我想做的事,但在 python 上運行大約需要 10 分鐘,在 Jupyter 上運行大約需要 1 分鐘。有很多循環,并且可能有一種更聰明的方法來做到這一點。我該怎么做才能讓它更快?歡迎任何建議。提前致謝!我讀過的其他表格很小,大約有 2 列和 10 行。import pandas as pdimport osos.chdir("C:/Users/user/Desktop")df = pd.read_excel('arquivo.xlsx')dias_de_embarque = [None]*df.shape[0]for i in range (0,df.shape[0]):    if (df['Centro custo emissor'][i] == 2002040041) & (df['Tp.ausência/presen?a'][i] == 602):                            dias_de_embarque[i] = round((1/12)*df['Horas'][i],4)    else:        dias_de_embarque[i] = 0folga_adquirida = [None]*df.shape[0]for i in range (0,df.shape[0]):    folga_adquirida[i] = round((5/7) * dias_de_embarque[i],4)dias_de_folga = [None]*df.shape[0]for i in range (0,df.shape[0]):    if df['Centro custo emissor'][i] == 2002040041 and df['Tp.ausência/presen?a'][i] == 323:        dias_de_folga[i] = round(df['Horas'][i]/8,4)    elif  df['Centro custo emissor'][i] == 2002040041 and df['Tp.ausência/presen?a'][i] == 608:        dias_de_folga[i] = round(df['Horas'][i]*(5/56),4)    else:        dias_de_folga[i] = 0saldo = [None]*df.shape[0]for i in range (0,df.shape[0]):    saldo[i] = folga_adquirida[i] - dias_de_folga[i]treinamento = [None]*df.shape[0]for i in range (0,df.shape[0]):    if df['Centro custo emissor'][i] == 2002040041 and df['Tp.ausência/presen?a'][i] == 606:        treinamento[i] = round(df['Horas'][i]/8,4)    else:        treinamento[i] = 0not_alocacao_codigos = pd.read_excel('Apoio e Budget.xlsx', 'not_alocacao_codigos')atividades = [None]*df.shape[0]for i in range (0, df.shape[0]):    if df['Opera??o'][i] in set(not_alocacao_codigos['Opera??o']):        atividades[i] = not_alocacao_codigos['Atividades Engenharia'][ not_alocacao_codigos[not_alocacao_codigos['Opera??o'] == df.Opera??o[i] ].index [0] ]    else:        atividades[i] = "-"
查看完整描述

1 回答

?
喵喔喔

TA貢獻1735條經驗 獲得超5個贊

只是不要在所有行中使用循環,例如


dias_de_embarque = [None]*df.shape[0]

for i in range (0,df.shape[0]):

     if (df['Centro custo emissor'][i] == 2002040041) & (df['Tp.ausência/presen?a'][i] == 602):                    

        dias_de_embarque[i] = round((1/12)*df['Horas'][i],4)

    else:

        dias_de_embarque[i] = 0

在 numpy 和 pandas 中,您應該使用如下數組操作:


df['Dias de Embarque'] = 0  # Init new column with 0-vector

編輯:


df.loc[df['Centro custo emissor'] == 2002040041) & (df['Tp.ausência/presen?a'] == 602), 'Dias de Embarque'] = round((1/12)*df['Horas'],4)  # At every position, where condition is True, set new value



查看完整回答
反對 回復 2021-11-30
  • 1 回答
  • 0 關注
  • 209 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號