Solucionado (ver solução)
Solucionado
(ver solução)
1
resposta

Pandas "to_datetime" altera parte das datas do meu dataframe

Olá pessoal bom dia / tarde/ noite Estou trabalhando com o pandas e extrai de um arquivo csv(meu df principal) que possui uma coluna horário onde os dados são fornecidos dessa forma : 01/09/2019 03:45:00 (data / horário) isso é automaticamente reconhecido como object mas preciso fazer algumas operações e para isso necessito que seja reconhecido como data time para isso inseri o comando : "df_setembro["Horário"]= pd.to_datetime(df_setembro["Horário"]) " porém ao printar "df_setembro" notei que parte das datas não foram corretamente convertidas , transformando as datas do mês de setembro, em datas do mês de janeiro, conforme pode ser visto na imagem !Insira aqui a descrição dessa imagem para ajudar na acessibilidade ja tentei inserir o format de diversas formas e também tentei o strptime o que me retorna uma mensagem de erro de combinação ou falta de atributo. Como posso corrigir isso?

1 resposta
solução!

Olá Darlene, boa tarde! O que está acontecendo é que o pandas segue o formato "Ano - Mês - Dia" por padrão na hora da conversão, por isso, ele acaba reconhecendo o dia 01/09/2021 como dia nove de janeiro, já que em países como os Estados Unidos as datas vêm com o mês primeiro e depois o dia. O método pd.to_datetime() vai usar o formato padrão se você não passar um como parâmetro. O nome do parâmetro que você tem que passar para resolver esse problema é 'format':

df_setembro['Horário'] = pd.to_datetime(df_setembro['Horário'], format="%d/%m/%Y %H:%M")

Usando esse código, tudo deve funcionar do jeito esperado. O format usa algumas letras para representar as datas: %d = dia, %m = mês, %Y = ano com 4 dígitos, %y = ano com 2 dígitos, %H = horas, %M = minutos, %S = segundos e assim por diante.

Outra possível solução, que é até mais simples, é adicionar o parâmetro 'dayfirst', que por padrão é False, e colocar como True:

df_setembro["Horário"]= pd.to_datetime(df_setembro["Horário"], dayfirst=True) 

Nesse caso, você só está indicando pro pandas que o dia vem antes do mês.

Se precisar, você pode olhar na documentação: https://pandas.pydata.org/docs/reference/api/pandas.to_datetime.html Espero ter ajudado!