Como filtrar linhas do DataFrame com base na data nos pandas?
Regiões diferentes seguem convenções de datas diferentes (AAAA-MM-DD, AAAA-DD-MM, DD / MM / AA, etc.). É difícil trabalhar com tais strings nos dados. Pandas to_datetime() função permite converter a data e hora no formato de cadeia para datetime64. Este tipo de dados ajuda a extrair recursos de data e hora que variam de 'ano' a 'microssegundos'.
Para filtrar linhas com base em datas, primeiro formate as datas no DataFrame para o tipo datetime64. Em seguida, use as funções DataFrame.loc [] e DataFrame.query [] do pacote Pandas para especificar uma condição de filtro. Como resultado, adquira o subconjunto de dados, ou seja, o DataFrame filtrado. Vamos ver alguns exemplos do mesmo.
Usaremos um DataFrame de amostra que consiste no número de postagens em um dia específico. Converta a data nos dados de amostra para o tipo datetime64 da seguinte maneira.
# Import Pandas package
import pandas as pd
# Create a sample dataframe
df = pd.DataFrame({'num_posts': [4, 6, 3, 9, 1, 14, 2, 5, 7, 2],
'date' : ['2020-08-09', '2020-08-25', '2020-09-05',
'2020-09-12', '2020-09-29', '2020-10-15',
'2020-11-21', '2020-12-02', '2020-12-10',
'2020-12-18']})
# Convert the date to datetime64
df['date'] = pd.to_datetime(df['date'], format='%Y-%m-%d')
# Display dataframe
df
Exemplo 1:
Filtre dados com base em datas usando a função DataFrame.loc [] , a função loc [] é usada para acessar um grupo de linhas e colunas de um DataFrame por meio de rótulos ou array booleano. Neste exemplo, a declaração condicional em loc [] retorna uma array booleana com valor True se a linha satisfizer a condição (a data está entre 1º e 15 de setembro) e valor False caso contrário. Em seguida, a função loc [] retorna apenas as linhas com valores True.
# Import Pandas package
import pandas as pd
# Create a sample dataframe
df = pd.DataFrame({'num_posts': [4, 6, 3, 9, 1, 14, 2, 5, 7, 2],
'date': ['2020-08-09', '2020-08-25',
'2020-09-05', '2020-09-12',
'2020-09-29', '2020-10-15',
'2020-11-21', '2020-12-02',
'2020-12-10', '2020-12-18']})
# Convert the date to datetime64
df['date'] = pd.to_datetime(df['date'], format='%Y-%m-%d')
# Filter data between two dates
filtered_df = df.loc[(df['date'] >= '2020-09-01')
& (df['date'] < '2020-09-15')]
# Display
filtered_df
Saída:
Exemplo 2:
Use DateTimeIndex (dt) para acessar atributos de data e hora separados, como ano, mês, dia, dia da semana, horas, minutos, segundos, microssegundos, etc. como uma condição na função loc [] da seguinte maneira.
Nota: Os valores de data devem estar no formato datetime64.
# Import Pandas package
import pandas as pd
# Create a sample dataframe
df = pd.DataFrame({'num_posts': [4, 6, 3, 9, 1, 14, 2, 5, 7, 2],
'date': ['2020-08-09', '2020-08-25',
'2020-09-05', '2020-09-12',
'2020-09-29', '2020-10-15',
'2020-11-21', '2020-12-02',
'2020-12-10', '2020-12-18']})
# Convert the date to datetime64
df['date'] = pd.to_datetime(df['date'], format='%Y-%m-%d')
# Filter data between two dates
filtered_df = df.loc[(df['date'] >= '2020-09-01')
& (df['date'] < '2020-09-15')]
# Display
print("\nPosts in December:")
print(filtered_df)
# Filter data for specific weekday (tuesday)
filtered_df = df.loc[df['date'].dt.weekday == 2]
# Display
print("\nPosts on all Tuesdays:")
print(filtered_df)
Saída:
Exemplo 3:
Filtre dados com base em datas usando a função DataFrame.query(). A função query() filtra um Pandas DataFrame e seleciona linhas especificando uma condição entre aspas. Conforme mostrado abaixo, a condição dentro da consulta() é selecionar os dados com datas no mês de agosto (intervalo de datas é especificado). As colunas do DataFrame são colocadas no namespace da consulta por padrão para que a coluna de data possa ser acessada sem indexação (simplesmente especifique o nome da coluna).
# Import Pandas package
import pandas as pd
# Create a sample dataframe
df = pd.DataFrame({'num_posts': [4, 6, 3, 9, 1, 14, 2, 5, 7, 2],
'date': ['2020-08-09', '2020-08-25',
'2020-09-05', '2020-09-12',
'2020-09-29', '2020-10-15',
'2020-11-21', '2020-12-02',
'2020-12-10', '2020-12-18']})
# Convert the date to datetime64
df['date'] = pd.to_datetime(df['date'], format='%Y-%m-%d')
# Filter data between two dates
filtered_df = df.query("date >= '2020-08-01' \
and date < '2020-09-01'")
# Display
filtered_df
Saída:
Atenção geek! Fortaleça suas bases com o Python Programming Foundation Course e aprenda o básico.
As postagens do blog Acervo Lima te ajudaram? Nos ajude a manter o blog no ar!
Faça uma doação para manter o blog funcionando.
70% das doações são no valor de R$ 5,00...
Diógenes Lima da Silva