Wie man DataFrame-Zeilen basierend auf dem Datum in Pandas filtert
- Zeilen zwischen zwei Datumsangaben mit boolescher Maske auswählen
-
pandas.DataFrame.query()
zur Auswahl vonDataFrame
-Zeilen zwischen zwei Datumsangaben -
pandas.DataFrame.isin()
zur Auswahl vonDataFrame
-Zeilen zwischen zwei Datumsangaben -
pandas.Series.between()
zur Auswahl vonDataFrame
-Zeilen zwischen zwei Datumsangaben
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 is a backend software engineer at Matrice.ai.
LinkedIn