Cómo filtrar filas de DataFrame según la fecha en Pandas

Suraj Joshi 30 enero 2023
  1. Seleccione filas entre dos fechas con máscara booleana
  2. pandas.DataFrame.query() para seleccionar filas DataFrame entre dos fechas
  3. pandas.DataFrame.isin() para seleccionar filas DataFrame entre dos fechas
  4. pandas.Series.between() para seleccionar filas DataFrame entre dos fechas
Cómo filtrar filas de DataFrame según la fecha en Pandas

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

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

LinkedIn

Artículo relacionado - Pandas DateTime