Pandas é uma poderosa biblioteca Python para manipulação e análise de dados. Trabalhar com datas e horários é uma tarefa comum e, muitas vezes, seus dados podem conter informações de data e hora em formato de string ou outros formatos não-datetime. Este artigo demonstra várias técnicas eficientes para converter colunas de Pandas DataFrame para o tipo de dado datetime, tornando a análise e manipulação de séries temporais significativamente mais fáceis.
Sumário:
- Conversão DateTime Eficiente com
pd.to_datetime()
- Lidando com Formatos Complexos com
apply()
- Convertendo Múltiplas Colunas Simultaneamente
- Usando
astype()
para Conversões Simples
1. Conversão DateTime Eficiente com pd.to_datetime()
A abordagem mais direta e recomendada é utilizar a função pd.to_datetime()
. Esta função é altamente versátil e hábil em lidar com uma ampla variedade de formatos de data e hora.
import pandas as pd
data = {'date_str': ['2024-03-08', '2024-03-09', '2024-03-10']}
df = pd.DataFrame(data)
# Converte a coluna 'date_str' para datetime
df['date'] = pd.to_datetime(df['date_str'])
print(df)
print(df.dtypes)
Este trecho de código cria um DataFrame com uma coluna de strings de data. pd.to_datetime()
infere automaticamente o formato e converte as strings em objetos datetime. A saída dtypes
confirma a conversão bem-sucedida. pd.to_datetime()
também lida com formatos com componentes de tempo e oferece tratamento de erros via parâmetro errors
(e.g., ‘coerce’ para substituir datas inválidas por NaT).
2. Lidando com Formatos Complexos com apply()
O método apply()
fornece flexibilidade aprimorada, particularmente ao lidar com formatos de data intrincados ou lógica de parsing personalizada.
import pandas as pd
data = {'date_str': ['Mar 8, 2024', 'Mar 9, 2024', 'Mar 10, 2024']}
df = pd.DataFrame(data)
# Função personalizada para analisar a string de data
def parse_date(date_str):
return pd.to_datetime(date_str, format='%b %d, %Y')
df['date'] = df['date_str'].apply(parse_date)
print(df)
print(df.dtypes)
Aqui, uma função personalizada parse_date
é definida para lidar com um formato de data específico. O método apply()
aplica esta função a cada elemento na coluna ‘date_str’. Esta abordagem é benéfica ao lidar com formatos de data inconsistentes ou exigir tratamento especializado.
3. Convertendo Múltiplas Colunas Simultaneamente
O método apply()
pode ser estendido para converter várias colunas ao mesmo tempo.
import pandas as pd
data = {'date_str': ['Mar 8, 2024', 'Mar 9, 2024', 'Mar 10, 2024'],
'time_str': ['10:00:00', '12:30:00', '14:45:00']}
df = pd.DataFrame(data)
def parse_date_time(row):
return pd.to_datetime(row['date_str'] + ' ' + row['time_str'], format='%b %d, %Y %H:%M:%S')
df['datetime'] = df.apply(parse_date_time, axis=1)
print(df)
print(df.dtypes)
Este exemplo combina strings de data e hora de colunas separadas. O argumento axis=1
em apply()
indica aplicação da função linha a linha.
4. Usando astype()
para Conversões Simples
O método astype()
oferece um método de conversão conciso, mas é menos flexível que pd.to_datetime()
. É mais eficaz quando suas datas já estão em um formato que o Pandas pode interpretar diretamente.
import pandas as pd
data = {'date_str': ['2024-03-08', '2024-03-09', '2024-03-10']}
df = pd.DataFrame(data)
df['date'] = pd.to_datetime(df['date_str']) #Primeiro converte para objeto datetime usando pd.to_datetime para flexibilidade
df['date'] = df['date'].astype('datetime64[ns]') #Agora podemos usar astype
print(df)
print(df.dtypes)
Enquanto astype
fornece uma conversão direta, pd.to_datetime
é geralmente preferido devido ao seu tratamento de erros superior e flexibilidade de formato. Note que uma conversão preliminar usando pd.to_datetime
é necessária antes de aplicar astype
; caso contrário, ocorrerá um erro.
O método ideal depende da complexidade dos seus dados e das necessidades específicas. Para a maioria dos cenários, pd.to_datetime()
fornece o melhor equilíbrio entre eficiência e flexibilidade. No entanto, o método apply()
oferece capacidades de funções personalizadas quando necessário, e astype
é uma solução concisa para casos simples onde os dados já estão em um formato apropriado.