Filtrar DataFrames Pandas com eficiência com base em intervalos de datas é uma habilidade crucial na análise de dados. O Pandas fornece vários métodos para alcançar isso, cada um com seus pontos fortes e fracos. Este artigo explora quatro abordagens populares, comparando sua sintaxe, eficiência e casos de uso.
Sumário
- Filtrando com Máscaras Booleanas
- Usando o Método
.query()
- Empregando o Método
.isin()
- Aproveitando o Método
.between()
Filtrando com Máscaras Booleanas
Máscaras booleanas oferecem a abordagem mais fundamental e flexível. Ela cria um array booleano (máscara) que filtra linhas com base em condições especificadas. Este método é altamente adaptável a cenários complexos.
import pandas as pd
data = {'Data': pd.to_datetime(['2023-10-26', '2023-11-15', '2023-12-01', '2024-01-10', '2024-02-20']),
'Valor': [10, 20, 30, 40, 50]}
df = pd.DataFrame(data)
data_inicio = pd.to_datetime('2023-11-01')
data_fim = pd.to_datetime('2024-01-01')
mascara = (df['Data'] >= data_inicio) & (df['Data'] <= data_fim)
df_filtrado = df[mascara] #Mais eficiente que df.loc[mascara]
print(df_filtrado)
Usando o Método .query()
O método .query()
fornece uma alternativa mais legível e concisa para filtragem. É particularmente benéfico para condições complexas.
data_inicio = '2023-11-01'
data_fim = '2024-01-01'
df_filtrado = df.query('@data_inicio <= Data <= @data_fim')
print(df_filtrado)
Empregando o Método .isin()
O método .isin()
é adequado quando você precisa selecionar linhas com base em uma lista de datas específicas, em vez de um intervalo contínuo. É menos eficiente para grandes intervalos contínuos.
datas_incluir = pd.to_datetime(['2023-11-15', '2023-12-01'])
df_filtrado = df[df['Data'].isin(datas_incluir)]
print(df_filtrado)
Aproveitando o Método .between()
O método .between()
oferece uma abordagem simplificada para selecionar linhas dentro de um intervalo de datas contínuo. É eficiente e fácil de ler.
data_inicio = pd.to_datetime('2023-11-01')
data_fim = pd.to_datetime('2024-01-01')
df_filtrado = df[df['Data'].between(data_inicio, data_fim, inclusive='both')] #argumento inclusive adicionado para clareza
print(df_filtrado)
Em resumo, o Pandas oferece diversos métodos para filtragem baseada em datas. A escolha ideal depende das suas necessidades específicas e estilo de codificação. Máscaras booleanas fornecem a máxima flexibilidade, .query()
melhora a legibilidade e .between()
simplifica a seleção de intervalos contínuos. Lembre-se de garantir que sua coluna de data seja do tipo datetime64
para desempenho ideal.