我怎样才能让这个 python 程序运行得更快?

我是 python 和 pandas 的新手,我设法做我想做的事,但在 python 上运行大约需要 10 分钟,在 Jupyter 上运行大约需要 1 分钟。有很多循环,并且可能有一种更聪明的方法来做到这一点。我该怎么做才能让它更快?欢迎任何建议。提前致谢!我读过的其他表格很小,大约有 2 列和 10 行。


import pandas as pd

import os

os.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] = 0


folga_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] = 0


saldo = [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] = 0


not_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] = "-"



牧羊人nacy
浏览 193回答 1
1回答

喵喔喔

只是不要在所有行中使用循环,例如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
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Python