Filtra le righe di DataFrame in base alla data in Pandas
- Seleziona righe tra due date con maschera booleana
-
pandas.DataFrame.query()
per selezionare le righeDataFrame
tra due date -
pandas.DataFrame.isin()
per selezionare le righeDataFrame
tra due date -
pandas.Series.between()
per selezionare le righeDataFrame
tra due date
Possiamo filtrare le righe DataFrame
in base alla data in Pandas usando la maschera booleana con il metodo loc
e l’indicizzazione DataFrame. Potremmo anche usare i metodi query
, isin
e between
per gli oggetti DataFrame
per selezionare le righe in base alla data in Pandas.
Seleziona righe tra due date con maschera booleana
Per filtrare le righe DataFrame in base alla data in Pandas utilizzando la maschera booleana, inizialmente creiamo una maschera booleana utilizzando la sintassi:
mask = (df["col"] > start_date) & (df["col"] <= end_date)
Dove start_date
e end_date
sono entrambi in formato datetime
e rappresentano l’inizio e la fine dell’intervallo da cui i dati devono essere filtrati. Quindi selezioniamo la parte di DataFrame che si trova all’interno dell’intervallo utilizzando il metodo 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)
Produzione:
Joined date
Hisila 2019-11-20
Shristi 2020-01-02
Zeppy 2020-02-05
Possiamo semplificare il processo di cui sopra utilizzando il metodo integrato df.loc[start_date:end_date]
impostando la colonna della data come colonna dell’indice.
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)
Produzione:
Name Salary
Joined date
2019-11-20 Hisila 200
2020-01-02 Shristi 400
2020-02-05 Zeppy 300
pandas.DataFrame.query()
per selezionare le righe DataFrame
tra due date
Possiamo anche filtrare le righe DataFrame in base alla data in Pandas utilizzando il metodo pandas.DataFrame.query()
. Il metodo restituisce un DataFrame risultante dall’espressione di query fornita.
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)
Produzione:
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()
per selezionare le righe DataFrame
tra due date
Metodo pandas.DataFrame.isin()
restituisce il Dataframe di valori booleani che rappresentano se l’elemento si trova o meno nell’intervallo specificato. Possiamo utilizzare questo metodo per filtrare le righe DataFrame in base alla data in 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)
Produzione:
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()
restituisce un DateTimeIndex
fisso. Il suo primo parametro è la data di inizio e il secondo parametro è la data di fine.
pandas.Series.between()
per selezionare le righe DataFrame
tra due date
Possiamo anche usare pandas.Series.between()
per filtrare DataFrame in base alla data. Il metodo restituisce un vettore booleano che rappresenta se l’elemento della serie si trova o meno nell’intervallo specificato. Passiamo così ottenuto il vettore booleano al metodo loc()
per estrarre 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)
Produzione:
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