Neste post, vamos explorar como manipular datas no Pandas, uma biblioteca Python amplamente utilizada para análise de dados. Manipular datas é uma tarefa comum em muitas análises de dados, especialmente ao trabalhar com séries temporais. Vamos criar um DataFrame de exemplo e abordar várias técnicas para trabalhar com datas no Pandas.
Sumário
O que é Manipulação de Datas?
Manipulação de datas envolve trabalhar com dados temporais, como datas e horários, para realizar diversas operações, incluindo extração de partes da data, agregação por períodos de tempo, e cálculos entre datas. O Pandas fornece ferramentas poderosas para essas tarefas, tornando o trabalho com datas eficiente e intuitivo.
![](https://www.balaiocientifico.com/wp-content/uploads/2022/12/banner_livro_python.webp)
Manipular Datas no Pandas
Criando um DataFrame com Datas
Vamos começar criando um DataFrame simples que contém uma coluna de datas:
# Manipular Datas no Pandas
import pandas as pd
data = {
'Data': ['2023-01-01', '2023-01-02', '2023-01-03', '2023-01-04'],
'Valor': [100, 200, 150, 300]
}
df = pd.DataFrame(data)
![](https://www.balaiocientifico.com/wp-content/uploads/2022/12/banner_livro_python.webp)
Convertendo Strings para Datas
Para manipular datas corretamente, precisamos converter as strings de datas para o tipo datetime
do Pandas:
# Manipular Datas no Pandas
df['Data'] = pd.to_datetime(df['Data'])
Extraindo Partes da Data
Podemos extrair partes específicas da data, como o ano, mês e dia, usando atributos do objeto datetime
:
# Manipular Datas no Pandas
df['Ano'] = df['Data'].dt.year
df['Mes'] = df['Data'].dt.month
df['Dia'] = df['Data'].dt.day
![](https://www.balaiocientifico.com/wp-content/uploads/2022/12/banner_livro_python.webp)
Filtrando Dados por Data
Para filtrar o DataFrame por uma data específica ou por um intervalo de datas:
- Filtrar por uma data específica:
# Manipular Datas no Pandas
df[df['Data'] == '2023-01-02']
- Filtrar por um intervalo de datas:
# Manipular Datas no Pandas
df[(df['Data'] >= '2023-01-02') & (df['Data'] <= '2023-01-03')]
![](https://www.balaiocientifico.com/wp-content/uploads/2022/12/banner_livro_python.webp)
Calculando Diferenças Entre Datas
Podemos calcular a diferença entre datas usando a operação de subtração, que retorna um objeto Timedelta
:
# Manipular Datas no Pandasdf['Dif_Dias'] = df['Data'] - df['Data'].shift(1)
Manipulação Avançada de Datas
![](https://www.balaiocientifico.com/wp-content/uploads/2022/12/banner_livro_python.webp)
Trabalhando com Intervalos de Tempo
O Pandas facilita a criação e manipulação de intervalos de tempo. Vamos criar um intervalo de datas usando a função date_range
:
intervalo = pd.date_range(start='2023-01-01', end='2023-01-10', freq='D')
Isso cria uma DatetimeIndex
com datas diárias entre 1 de janeiro de 2023 e 10 de janeiro de 2023. Podemos usar este intervalo para criar um DataFrame:
df_intervalo = pd.DataFrame(intervalo, columns=['Data'])
df_intervalo['Valor'] = range(1, len(df_intervalo) + 1)
![](https://www.balaiocientifico.com/wp-content/uploads/2022/12/banner_livro_python.webp)
Mudando Frequências de Dados
Às vezes, é necessário mudar a frequência dos dados. Por exemplo, converter dados diários em dados mensais:
df_mensal = df.set_index('Data').resample('M').sum()
O inverso também é possível, onde podemos desagregar dados mensais para diários:
df_diario = df_mensal.resample('D').pad()
Trabalhando com Datas e Horas
O Pandas também suporta operações com datas e horas. Vamos adicionar uma coluna de horas ao nosso DataFrame de exemplo:
df['Hora'] = ['10:00', '11:00', '12:00', '13:00']
df['Data_Hora'] = pd.to_datetime(df['Data'] + ' ' + df['Hora'])
Agora podemos extrair partes específicas da hora:
df['Hora'] = df['Data_Hora'].dt.hour
df['Minuto'] = df['Data_Hora'].dt.minute
![](https://www.balaiocientifico.com/wp-content/uploads/2022/12/banner_livro_python.webp)
Diferença Entre Datas e Horas
Para calcular a diferença entre duas colunas de datas e horas, podemos simplesmente subtraí-las:
df['Dif_Horas'] = df['Data_Hora'] - df['Data_Hora'].shift(1)
Deslocando Datas
O Pandas permite deslocar datas facilmente, o que é útil para criar lags ou leads em séries temporais:
df['Data_Ant'] = df['Data'].shift(1)
df['Data_Prox'] = df['Data'].shift(-1)
Manipulando Feriados e Fins de Semana
Para excluir fins de semana e feriados de uma análise, podemos usar a biblioteca pandas.tseries.holiday
:
from pandas.tseries.holiday import USFederalHolidayCalendar
cal = USFederalHolidayCalendar()
feriados = cal.holidays(start='2023-01-01', end='2023-12-31')
df['Dia_Util'] = ~df['Data'].isin(feriados) & (df['Data'].dt.weekday < 5)
![](https://www.balaiocientifico.com/wp-content/uploads/2022/12/banner_livro_python.webp)
Resample: Agregando Dados por Períodos de Tempo
A função resample
permite agregar dados por diferentes períodos de tempo. Por exemplo, para calcular a soma dos valores por mês:
df.set_index('Data').resample('M').sum()
Links Úteis e Mais Conteúdo
Para mais informações sobre como utilizar o Pandas para análise de dados, confira outros conteúdos no meu blog:
- Vantagens de Aprender Python
- Python Orientado a Objetos
- GroupBy no Pandas
- Selecionar Coluna no Pandas
- Merge no Pandas
Considerações Finais
Espero que este guia tenha sido útil para aprender como manipular datas no Pandas. A prática é essencial para dominar essas técnicas, então encorajo você a experimentar e aplicar esses métodos em seus próprios projetos de análise de dados.
Para aprimorar suas habilidades com o Pandas e se tornar mais eficiente na manipulação de dados, é importante também fortalecer sua compreensão em Python. Recomendamos o livro “Fundamentos em Python: Para Iniciantes em Programação e Computação”, disponível na Amazon, que oferece uma introdução abrangente ao Python.
![](https://www.balaiocientifico.com/wp-content/uploads/2022/12/banner_livro_python.webp)
Junte-se à nossa comunidade no Twitter e inscreva-se no nosso canal do YouTube para acessar mais tutoriais, dicas e recursos. Continue praticando e explorando novas maneiras de manipular dados com o Pandas, e fique atento para mais guias e tutoriais que compartilharemos.