Data Science

Dominando a Conversão de Datas com Pandas: Técnicas Eficientes para Manipulação de Dados

Spread the love

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:

  1. Conversão DateTime Eficiente com pd.to_datetime()
  2. Lidando com Formatos Complexos com apply()
  3. Convertendo Múltiplas Colunas Simultaneamente
  4. 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.

Deixe um comentário

O seu endereço de email não será publicado. Campos obrigatórios marcados com *