Lidar com datas é sempre complexo. Já tratamos disso aqui em diversas ocasiões, como por exemplo em Formatando Datas no SAS. Chegou a hora de falar como lidar com esse problemão quando estamos no Python!
Há diversas formas de se deparar com uma data mal formatada no Python. Veja o dataset abaixo, onde criamos quatro campos, sendo três textos e um numérico:
import pandas as pd
dados = {'data_1': ['20191001','20191010', '19991001'],
'data_2': ['01-10-2019', '10-10-2019', '01-10-1999'],
'data_3': ['01oct2019','10oct2019', '01oct1999'],
'data_4':[20191001, 20191010, 19991001]}
df = pd.DataFrame(dados, columns=['data_1','data_2','data_3','data_4'])
Se você quiser checar a tabela:
df
Outra dúvida que você pode ter é se os campos realmente não são datas:
df.dtypes
Bom, já vimos que não temos nenhum campo devidamente formatado. Temos os formatos AAAAMMDD (text0), DD-MM-AAAA, DD-MMM-AAAA e AAAAMMDD (numérico).
Mas veja que fácil, a própria biblioteca pandas possui uma função que faz a conversão que precisamos, chama-se to_datetime:
df['data_1'] = pd.to_datetime(df['data_1'], format="%Y%m%d")
dtypes
Simples, ein? Você só precisou passar a informação do formato em que sua data se encontra. Isso vale para todos os casos:
df['data_2'] = pd.to_datetime(df['data_2'], format="%d-%m-%Y")
df['data_3'] = pd.to_datetime(df['data_3'], format="%d%b%Y")
df['data_4'] = pd.to_datetime(df['data_4'], format="%Y%m%d")
df
Parece que deu certo. Mas para ter certeza:
Ah, mas por que falar de data e não ensinar como extrair uma parte dela, não é mesmo? Se você quiser extrair o mês ou o ano é bem fácil:
df['mes'] = pd.DatetimeIndex(df['data_1']).month
df['ano'] = pd.DatetimeIndex(df['data_1']).year
Às vezes você pode querer uma combinação de ano e mês:
df['mes_ano'] = pd.to_datetime(df['data_1']).dt.to_period('M')
Viu como é tranquilo trabalhar com Pandas?
Gostou dos posts? Deixe um recado aí, um feedback, é bastante importante. Se você tiver Twitter, boas discussões rolam no @EstatSite. Se preferir, você pode entrar em contato comigo pelo formulário em Sobre o Estatsite / Contato.
Forte Abraço e Bons Estudos!