13.10. Processamento e Limpeza de Dados com Pandas: Trabalho com Datas e Horários
O trabalho com datas e horários é uma parte fundamental da análise de dados. Em muitos conjuntos de dados, as informações temporais são cruciais para a realização de análises como séries temporais, estudos de sazonalidade, e tendências ao longo do tempo. No Python, a biblioteca Pandas oferece ferramentas robustas para manipular esses tipos de dados. Este capítulo abordará como você pode processar e limpar dados de datas e horários usando Pandas.
Compreensão dos Tipos de Dados Temporais
Antes de começarmos a manipular datas e horários, é importante entender os tipos de dados temporais disponíveis em Pandas:
- Timestamp: Representa um ponto específico no tempo.
- DatetimeIndex: Um array de Timestamps, frequentemente usado como índice em um DataFrame ou Series.
- Period: Representa um intervalo de tempo.
- PeriodIndex: Um array de Periods, também usado como índice.
- Timedelta: Representa a diferença de tempo entre dois pontos no tempo.
Conversão de Strings para Datetime
Em muitos conjuntos de dados, as datas e horários vêm como strings. Para trabalhar com esses dados, primeiro precisamos convertê-los para o tipo Timestamp. Isso pode ser feito com a função pd.to_datetime()
. Esta função é bastante flexível e pode interpretar uma grande variedade de formatos de data e hora.
import pandas as pd
# Exemplo de conversão de string para datetime
data_series = pd.Series(['2023-01-01', '2023-01-02', '2023-01-03'])
data_series = pd.to_datetime(data_series)
Se você estiver lidando com um formato de data e hora mais exótico, pode usar o argumento format
para especificar exatamente como a data e hora devem ser interpretadas:
# Exemplo de conversão com formato específico
data_series = pd.Series(['01-01-2023', '02-01-2023', '03-01-2023'])
data_series = pd.to_datetime(data_series, format='%d-%m-%Y')
Trabalhando com Datas e Horários em DataFrames
Em um DataFrame, muitas vezes queremos converter uma ou mais colunas para o tipo datetime. Podemos fazer isso durante a leitura de um arquivo CSV/Excel com a opção parse_dates
, ou depois de carregar o DataFrame usando pd.to_datetime()
.
# Conversão durante a leitura de um arquivo CSV
df = pd.read_csv('data.csv', parse_dates=['date_column'])
# Conversão após a leitura do DataFrame
df['date_column'] = pd.to_datetime(df['date_column'])
Seleção e Filtragem de Dados Temporais
Com as datas convertidas para datetime, você pode facilmente filtrar e selecionar dados baseados no tempo. Por exemplo, para selecionar todas as entradas de um determinado ano, mês ou dia, você pode usar a propriedade dt
junto com condições booleanas:
# Selecionando dados de um determinado ano
df_2023 = df[df['date_column'].dt.year == 2023]
# Filtrando por um mês específico
df_january = df[df['date_column'].dt.month == 1]
Operações com Datas e Horários
Pandas permite realizar operações matemáticas com datas. Por exemplo, você pode adicionar ou subtrair dias de uma data:
# Adicionando 10 dias a uma coluna de datas
df['date_column'] += pd.Timedelta(days=10)
# Subtraindo 5 horas de uma coluna de horários
df['time_column'] -= pd.Timedelta(hours=5)
Da mesma forma, você pode calcular a diferença entre duas datas e obter um Timedelta:
# Calculando a diferença entre duas datas
df['difference'] = df['date_column'] - pd.to_datetime('2023-01-01')
Agrupamento e Resample de Dados Temporais
Para análises de séries temporais, muitas vezes é necessário agrupar dados por períodos de tempo. Isso pode ser feito com o método groupby()
ou resample()
, que é especificamente projetado para dados temporais:
# Agrupando por ano e calculando a média
df.groupby(df['date_column'].dt.year).mean()
# Reamostrando os dados para obter a soma mensal
df.resample('M', on='date_column').sum()
Tratando Dados Faltantes em Séries Temporais
Em séries temporais, muitas vezes encontramos dados faltantes. Pandas oferece métodos como fillna()
, bfill()
e ffill()
para tratar esses casos:
# Preenchendo dados faltantes com o valor anterior
df['column'].fillna(method='ffill')
# Preenchendo dados faltantes com o valor seguinte
df['column'].fillna(method='bfill')
Conclusão
Trabalhar com datas e horários em Pandas é essencial para uma análise de dados eficaz e precisa. Compreender como converter, filtrar, e manipular esses dados permite que você extraia insights significativos e realize análises temporais complexas. A biblioteca Pandas fornece um conjunto de ferramentas poderosas que facilitam essas tarefas, tornando o Python uma escolha excelente para processamento e limpeza de dados temporais.
Praticar essas técnicas com conjuntos de dados reais irá solidificar seu entendimento e habilidade em lidar com datas e horários, abrindo portas para uma análise de dados mais profunda e informativa.