Como filtrar linhas DataFrame com base na data em Pandas
- Selecionar Linhas entre duas datas com máscara booleana
-
pandas.DataFrame.query()
para selecionar linhasDataFrame
entre duas datas -
pandas.DataFrame.isin()
para selecionarDataFrame
Linhas entre duas datas -
pandas.Series.between()
para selecionar linhas deDataFrame
entre duas datas
Podemos filtrar as linhas DataFrame com base na data em Pandas utilizando a máscara booleana com o método local e indexação DataFrame. Também podemos utilizar os métodos query
, isin
e between
para objetos DataFrame
para selecionar linhas com base na data em Pandas.
Selecionar Linhas entre duas datas com máscara booleana
Para filtrar as linhas DataFrame com base na data em Pandas usando a máscara booleana, a princípio criamos a máscara booleana usando a sintaxe:
mask = (df["col"] > start_date) & (df["col"] <= end_date)
Onde start_date
e end_date
estão ambos no formato datetime
, e representam o início e o fim do intervalo a partir do qual os dados têm que ser filtrados. Então selecionamos a parte do DataFrame que está dentro do intervalo utilizando o método df.loc()
.
import pandas as pd
import numpy as np
import datetime
list_of_dates = [
"2019-11-20",
"2020-01-02",
"2020-02-05",
"2020-03-10",
"2020-04-16",
"2020-05-01",
]
employees = ["Hisila", "Shristi", "Zeppy", "Alina", "Jerry", "Kevin"]
df = pd.DataFrame({"Joined date": pd.to_datetime(list_of_dates)}, index=employees)
mask = (df["Joined date"] > "2019-06-1") & (df["Joined date"] <= "2020-02-05")
filtered_df = df.loc[mask]
print(filtered_df)
Resultado:
Joined date
Hisila 2019-11-20
Shristi 2020-01-02
Zeppy 2020-02-05
Podemos simplificar o processo acima utilizando o método integrado df.loc[start_date:end_date]
, definindo a coluna de data como uma coluna de índice.
import pandas as pd
import numpy as np
import datetime
list_of_dates = [
"2019-11-20",
"2020-01-02",
"2020-02-05",
"2020-03-10",
"2020-04-16",
"2020-05-01",
]
employees = ["Hisila", "Shristi", "Zeppy", "Alina", "Jerry", "Kevin"]
salary = [200, 400, 300, 500, 600, 300]
df = pd.DataFrame(
{"Name": employees, "Joined date": pd.to_datetime(list_of_dates), "Salary": salary}
)
df = df.set_index(["Joined date"])
filtered_df = df.loc["2019-06-1":"2020-02-05"]
print(filtered_df)
Resultado:
Name Salary
Joined date
2019-11-20 Hisila 200
2020-01-02 Shristi 400
2020-02-05 Zeppy 300
pandas.DataFrame.query()
para selecionar linhas DataFrame
entre duas datas
Também podemos filtrar as linhas DataFrame com base na data em Pandas utilizando o método pandas.DataFrame.query()
. O método retorna um DataFrame resultante da expressão de consulta fornecida.
import pandas as pd
import numpy as np
import datetime
list_of_dates = [
"2019-11-20",
"2020-01-02",
"2020-02-05",
"2020-03-10",
"2020-04-16",
"2020-05-01",
]
employees = ["Hisila", "Shristi", "Zeppy", "Alina", "Jerry", "Kevin"]
salary = [200, 400, 300, 500, 600, 300]
df = pd.DataFrame(
{"Name": employees, "Joined_date": pd.to_datetime(list_of_dates), "Salary": salary}
)
filtered_df = df.query("Joined_date >= '2019-06-1' and Joined_date <='2020-02-05'")
print(filtered_df)
Resultado:
Name Joined_date Salary
0 Hisila 2019-11-20 200
1 Shristi 2020-01-02 400
2 Zeppy 2020-02-05 300
pandas.DataFrame.isin()
para selecionar DataFrame
Linhas entre duas datas
pandas.DataFrame.isin()
retorna o Dataframe de booleanos que representa se o elemento está ou não no intervalo especificado. Podemos utilizar este método para filtrar as linhas DataFrame com base na data em Pandas.
import pandas as pd
import numpy as np
import datetime
list_of_dates = [
"2019-11-20",
"2020-01-02",
"2020-02-05",
"2020-03-10",
"2020-04-16",
"2020-05-01",
]
employees = ["Hisila", "Shristi", "Zeppy", "Alina", "Jerry", "Kevin"]
salary = [200, 400, 300, 500, 600, 300]
df = pd.DataFrame(
{"Name": employees, "Joined_date": pd.to_datetime(list_of_dates), "Salary": salary}
)
filtered_df = df[df["Joined_date"].isin(pd.date_range("2019-06-1", "2020-02-05"))]
print(filtered_df)
Resultado:
Name Joined_date Salary
0 Hisila 2019-11-20 200
1 Shristi 2020-01-02 400
2 Zeppy 2020-02-05 300
pandas.date_range()
retorna um fixo DateTimeIndex
. Seu primeiro parâmetro é a data inicial, e o segundo parâmetro é a data final.
pandas.Series.between()
para selecionar linhas de DataFrame
entre duas datas
Também podemos utilizar pandas.Series.between()
para filtrar DataFrame com base na data. O método retorna um vetor booleano que representa se o elemento em série está ou não no intervalo especificado. O método retorna um vetor booleano que representa se o elemento em série está ou não na faixa especificada.
import pandas as pd
import numpy as np
import datetime
list_of_dates = [
"2019-11-20",
"2020-01-02",
"2020-02-05",
"2020-03-10",
"2020-04-16",
"2020-05-01",
]
employees = ["Hisila", "Shristi", "Zeppy", "Alina", "Jerry", "Kevin"]
salary = [200, 400, 300, 500, 600, 300]
df = pd.DataFrame(
{"Name": employees, "Joined_date": pd.to_datetime(list_of_dates), "Salary": salary}
)
filtered_df = df.loc[df["Joined_date"].between("2019-06-1", "2020-02-05")]
print(filtered_df)
Resultado:
Name Joined_date Salary
0 Hisila 2019-11-20 200
1 Shristi 2020-01-02 400
2 Zeppy 2020-02-05 300
Suraj Joshi is a backend software engineer at Matrice.ai.
LinkedIn