Wie man DataFrame-Zeilen basierend auf dem Datum in Pandas filtert

Suraj Joshi 30 Januar 2023
  1. Zeilen zwischen zwei Datumsangaben mit boolescher Maske auswählen
  2. pandas.DataFrame.query() zur Auswahl von DataFrame-Zeilen zwischen zwei Datumsangaben
  3. pandas.DataFrame.isin() zur Auswahl von DataFrame-Zeilen zwischen zwei Datumsangaben
  4. pandas.Series.between() zur Auswahl von DataFrame-Zeilen zwischen zwei Datumsangaben
Wie man DataFrame-Zeilen basierend auf dem Datum in Pandas filtert

Wir können DataFrame-Zeilen basierend auf dem Datum in Pandas filtern, indem wir die boolesche Maske mit der loc-Methode und der DataFrame-Indizierung verwenden. Wir könnten auch query-, isin- und between-Methoden für DataFrame-Objekte verwenden, um Zeilen basierend auf dem Datum in Pandas auszuwählen.

Zeilen zwischen zwei Datumsangaben mit boolescher Maske auswählen

Um DataFrame-Zeilen basierend auf dem Datum in Pandas mit Hilfe der booleschen Maske zu filtern, erstellen wir zunächst eine boolesche Maske mit der Syntax:

mask = (df["col"] > start_date) & (df["col"] <= end_date)

Wobei start_date und end_date beide im Format datetime sind, und sie repräsentieren den Anfang und das Ende des Bereichs, aus dem Daten gefiltert werden müssen. Dann wählen wir den Teil von DataFrame, der innerhalb des Bereichs liegt, mit der df.loc() Methode aus.

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)

Ausgabe:

        Joined date
Hisila   2019-11-20
Shristi  2020-01-02
Zeppy    2020-02-05

Wir können das obige Verfahren mit der integrierten Methode df.loc[start_date:end_date] vereinfachen, indem wir die Datumsspalte als Indexspalte setzen.

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)

Ausgabe:

                Name  Salary
Joined date                 
2019-11-20    Hisila     200
2020-01-02   Shristi     400
2020-02-05     Zeppy     300

pandas.DataFrame.query() zur Auswahl von DataFrame-Zeilen zwischen zwei Datumsangaben

Wir können auch DataFrame-Zeilen basierend auf dem Datum in Pandas filtern, indem wir die Methode pandas.DataFrame.query() verwenden. Die Methode gibt einen DataFrame zurück, der sich aus dem bereitgestellten Abfrageausdruck ergibt.

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)

Ausgabe:

      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() zur Auswahl von DataFrame-Zeilen zwischen zwei Datumsangaben

pandas.DataFrame.isin() gibt den DataFrame von Booleans zurück, die darstellen, ob das Element im angegebenen Bereich liegt oder nicht. Wir können diese Methode verwenden, um DataFrame-Zeilen basierend auf dem Datum in Pandas zu filtern.

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)

Ausgabe:

      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() gibt einen festen DateTimeIndex zurück. Sein erster Parameter ist das Anfangsdatum, und der zweite Parameter ist das Enddatum.

pandas.Series.between() zur Auswahl von DataFrame-Zeilen zwischen zwei Datumsangaben

Wir können auch pandas.Series.between() verwenden, um DataFrame nach Datum zu filtern. Die Methode gibt einen boolschen Vektor zurück, der angibt, ob das Serienelement im angegebenen Bereich liegt oder nicht. Wir übergeben den so erhaltenen booleschen Vektor an die loc() Methode, um DataFrame zu extrahieren.

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)

Ausgabe:

      Name Joined_date  Salary
0   Hisila  2019-11-20     200
1  Shristi  2020-01-02     400
2    Zeppy  2020-02-05     300
Suraj Joshi avatar Suraj Joshi avatar

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

LinkedIn

Verwandter Artikel - Pandas DateTime