Cómo filtrar filas de DataFrame según la fecha en Pandas
- Seleccione filas entre dos fechas con máscara booleana
-
pandas.DataFrame.query()
para seleccionar filasDataFrame
entre dos fechas -
pandas.DataFrame.isin()
para seleccionar filasDataFrame
entre dos fechas -
pandas.Series.between()
para seleccionar filasDataFrame
entre dos fechas
Podemos filtrar filas de DataFrame
según la fecha en Pandas utilizando la máscara booleana con el método loc
y la indexación de DataFrame. También podríamos usar los métodos query
, isin
y between
para los objetos DataFrame
para seleccionar filas en función de la fecha en Pandas.
Seleccione filas entre dos fechas con máscara booleana
Para filtrar filas de DataFrame basadas en la fecha en Pandas usando la máscara booleana, primero creamos una máscara booleana usando la sintaxis:
mask = (df["col"] > start_date) & (df["col"] <= end_date)
Donde start_date
y end_date
están en formato datetime
, y representan el inicio y el final del rango desde el que se deben filtrar los datos. Luego seleccionamos la parte de DataFrame que se encuentra dentro del rango utilizando el método 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)
Producción :
Joined date
Hisila 2019-11-20
Shristi 2020-01-02
Zeppy 2020-02-05
Podemos simplificar el proceso anterior usando el método integrado df.loc[start_date:end_date]
configurando la columna de fecha como una columna de índice.
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)
Producción :
Name Salary
Joined date
2019-11-20 Hisila 200
2020-01-02 Shristi 400
2020-02-05 Zeppy 300
pandas.DataFrame.query()
para seleccionar filas DataFrame
entre dos fechas
También podemos filtrar filas de DataFrame en función de la fecha en Pandas utilizando el pandas.DataFrame.query()
. El método devuelve un DataFrame resultante de la expresión de consulta proporcionada.
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)
Producción :
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()
para seleccionar filas DataFrame
entre dos fechas
pandas.DataFrame.isin()
devuelve el Dataframe de booleanos que representa si el elemento se encuentra en el rango especificado o no. Podemos usar este método para filtrar filas de DataFrame en función de la fecha en 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)
Producción :
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()
devuelve un DateTimeIndex
fijo. Su primer parámetro es la fecha de inicio, y el segundo parámetro es la fecha de finalización.
pandas.Series.between()
para seleccionar filas DataFrame
entre dos fechas
También podemos usar pandas.Series.between()
para filtrar DataFrame según la fecha El método devuelve un vector booleano que representa si el elemento Series se encuentra en el rango especificado o no. Pasamos así obtenido el vector booleano al método loc()
para extraer 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)
Producción :
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