Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

[Dúvida] Dúvida com o formato da data

Pessoal, tudo bem?

Fiquei com uma dúvida na etapa de transformação da coluna "Data da Compra".

Quando usamos a função do pandas to_datetime a coluna passa a ser do tipo datetime64 e já fica com o formato que queríamos na aula, ano-mes-dia. Mas, logo em seguida, quando utilizamos o método dt.strftime para deixar as datas nesse formato (que já está), a coluna volta a ser do tipo object.

Não entendi por que fizemos esse passo do dt.strftime. Alguém pode me explicar?

Abraços.

2 respostas
solução!

Oi!

É verdade, essa função transforma a coluna em um tipo chamado datetime64, que é tipo uma linguagem universal para datas no pandas. Dá pra fazer um monte de coisas legais com datas usando esse tipo, tipo calcular diferenças entre datas e extrair o mês.

Mas a pegadinha é que o MySQL não curte esse tipo datetime64. Ele é meio exigente e quer as datas em formato de string 'AAAA-MM-DD'. Então, a mágica acontece com o dt.strftime('%Y-%m-%d'), que transforma essa coluna de volta em string, mas no formato que o MySQL curte.

Só fica esperto que, apesar de parecer a mesma coluna, pro pandas e pro MySQL, elas são diferentes. Antes do strftime, é tipo uma série de números. Depois, vira uma série de strings que se parecem com datas pra gente, mas são tratadas de forma diferente.

Ah, e se tentar extrair o ano depois do strftime, não rola. Tipo assim:

df_livros["Data da Compra"] = pd.to_datetime(df_livros["Data da Compra"], format="%d/%m/%Y")
print(df_livros["Data da Compra"].dt.year)  # Beleza, funciona

df_livros["Data da Compra"] = df_livros["Data da Compra"].dt.strftime("%Y-%m-%d")
print(df_livros["Data da Compra"].dt.year)  # Aí não rola, dá erro

Shooowwwww obrigadooooo!!!