Comment filtrer les lignes DataFrame en fonction de la date dans Pandas
- Sélectionnez des lignes entre deux dates avec un masque booléen
-
pandas.DataFrame.query()
pour sélectionner les lignesDataFrame
entre deux dates -
pandas.DataFrame.isin()
pour sélectionner les lignesDataFrame
entre deux dates -
pandas.Series.between()
pour sélectionner les lignesDataFrame
entre deux dates
Nous pouvons filtrer les lignes DataFrame
en fonction de la date dans Pandas en utilisant le masque booléen avec la méthode loc
et l’indexation DataFrame. Nous pourrions également utiliser les méthodes query
, isin
et between
pour les objets DataFrame
pour sélectionner des lignes en fonction de la date dans Pandas.
Sélectionnez des lignes entre deux dates avec un masque booléen
Pour filtrer les lignes DataFrame en fonction de la date dans Pandas en utilisant le masque booléen, nous créons d’abord un masque booléen en utilisant la syntaxe:
mask = (df["col"] > start_date) & (df["col"] <= end_date)
Où start_date
et end_date
sont tous les deux au format datetime
, et ils représentent le début et la fin de la plage à partir de laquelle les données doivent être filtrées. Ensuite, nous sélectionnons la partie de DataFrame qui se trouve dans la plage en utilisant la méthode 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)
Production:
Joined date
Hisila 2019-11-20
Shristi 2020-01-02
Zeppy 2020-02-05
Nous pouvons simplifier le processus ci-dessus en utilisant la méthode intégrée df.loc[start_date:end_date]
en définissant la colonne date comme colonne d’index.
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)
Production:
Name Salary
Joined date
2019-11-20 Hisila 200
2020-01-02 Shristi 400
2020-02-05 Zeppy 300
pandas.DataFrame.query()
pour sélectionner les lignes DataFrame
entre deux dates
Nous pouvons également filtrer les lignes DataFrame en fonction de la date dans Pandas en utilisant le pandas.DataFrame.query()
. La méthode retourne un DataFrame résultant de l’expression de requête fournie.
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)
Production:
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()
pour sélectionner les lignes DataFrame
entre deux dates
pandas.DataFrame.isin()
retourne le Dataframe des booléens qui représentent si l’élément se situe dans la plage spécifiée ou non. Nous pouvons utiliser cette méthode pour filtrer les lignes DataFrame en fonction de la date dans 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)
Production:
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()
retourne un DateTimeIndex
fixe. Son premier paramètre est la date de début et le deuxième paramètre est la date de fin.
pandas.Series.between()
pour sélectionner les lignes DataFrame
entre deux dates
Nous pouvons également utiliser pandas.Series.between()
pour filtrer DataFrame en fonction de la date. La méthode retourne un vecteur booléen représentant si l’élément de série se trouve dans la plage spécifiée ou non. On passe ainsi obtenu le vecteur booléen à la méthode loc()
pour extraire DataFrame.
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)
Production:
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