Comment filtrer les lignes DataFrame en fonction de la date dans Pandas

Suraj Joshi 30 janvier 2023
  1. Sélectionnez des lignes entre deux dates avec un masque booléen
  2. pandas.DataFrame.query() pour sélectionner les lignes DataFrame entre deux dates
  3. pandas.DataFrame.isin() pour sélectionner les lignes DataFrame entre deux dates
  4. pandas.Series.between() pour sélectionner les lignes DataFrame entre deux dates
Comment filtrer les lignes DataFrame en fonction de la date dans Pandas

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)

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
Auteur: Suraj Joshi
Suraj Joshi avatar Suraj Joshi avatar

Suraj Joshi is a backend software engineer at Matrice.ai.

LinkedIn

Article connexe - Pandas DateTime