3
respostas

Problema com Horas no DataFrame/Python

Bom dia Estou tendo um problema para fazer um calculo de horas no meu data frame. Não consigo fazer operações por não conseguir converter a série dento do data frame em horas (datetime).

Index    Data    Inicio        Fim        Demora    Operador    Tarefa
0    2020-12-26    14:50:00    15:55:00    01:05:00    Micael    Ajuda outro  Setor
1    2020-12-26    15:25:00    16:15:00    00:50:00    Caio    Atividade extra

Essa coluna "Demora" foi feita a conta no excel por eu não ter conseguido também fazer a soma dentro do Python.

3 respostas

Olá Gustavo,

Você pode converter as colunas para datetime com o método pd.to_datetime() do pandas, exemplo:

# Convertendo Fim para datetime
pd.to_datetime(df['Fim'])

Para evitar mexer nas colunas Inicio e Fim, você pode converter apenas na hora de calcular o valor de Demora, exemplo:

df['Demora'] = pd.to_datetime(df['Fim']) - pd.to_datetime(df['Inicio'])

Espero ter ajudado, qualquer dúvida é só falar!

Tentei executar a maneira como me orientou, porém não deu certo. Segue erro:

TypeError Traceback (most recent call last) in () 1 dados.columns = ["Data", "Inicio", "Fim", "Demora", "Operador", "Setor", "Solicitante", "Tarefa"] 2 dados.head() ----> 3 pd.to_datetime(dados['Fim'])

3 frames /usr/local/lib/python3.6/dist-packages/pandas/core/arrays/datetimes.py in objects_to_datetime64ns(data, dayfirst, yearfirst, utc, errors, require_iso8601, allow_object) 1973 dayfirst=dayfirst, 1974 yearfirst=yearfirst, -> 1975 require_iso8601=require_iso8601, 1976 ) 1977 except ValueError as e:

pandas/_libs/tslib.pyx in pandas._libs.tslib.array_to_datetime()

pandas/_libs/tslib.pyx in pandas._libs.tslib.array_to_datetime()

pandas/_libs/tslib.pyx in pandas._libs.tslib.array_to_datetime_object()

pandas/_libs/tslib.pyx in pandas._libs.tslib.array_to_datetime()

TypeError: <class 'datetime.time'> is not convertible to datetime

Aparentemente a coluna Fim já está no formato de time (uma variação do datetime), e assim não funciona a conversão direta.

Tenta então realizar a conversão de time para datetime passando o formato:

# Assumindo que Fim e Inicio já estejam no formato de time
df['Demora'] = pd.to_datetime(df['Fim'], format='%H:%M:%S') - pd.to_datetime(df['Inicio'], format='%H:%M:%S')

Para o código acima funcionar todos os valores de Inicio e Fim devem estar no formato hh:mm:ss

Caso ainda não funcione vai ser ou pelo caso mencionado logo acima ou alguma diferença no tipo dos dados, assim só vendo o seu código completo e a origem dos dados para facilitar a análise. Até agora o que eu mandei foi baseado em um conjunto de dados que eu criei manualmente para tentar simular o seu cenário.

Fico no aguardo, diz aqui se deu certo ou se ainda acontece algum problema.