En este artículo, aprenderemos cómo verificar fechas faltantes en Pandas.
Acercarse:
- Se crea un marco de datos a partir de un diccionario de listas usando pd.DataFrame() que acepta los datos como su parámetro. Tenga en cuenta que aquí, el diccionario consta de dos listas denominadas Fecha y Nombre. Ambos tienen la misma longitud y faltan algunas fechas en la secuencia de fechas dada (Del 18-01-2021 al 25-01-2021 ). También podemos proporcionar un archivo CSV a este método en lugar de crear un conjunto de datos propio.
- El método df.set_index() establece las fechas como índice para el marco de datos que creamos. Uno puede simplemente imprimir el marco de datos usando print(df) para verlo antes y después de configurar la Fecha como índice.
Sintaxis: DataFrame.set_index(keys, drop=True, append=False, inplace=False)
Antes de establecer la fecha como índice:
Fecha | Nombre | |
---|---|---|
0 |
2021-01-18 |
jia |
1 | 2021-01-20 | tania |
2 | 2021-01-23 | Rohan |
3 | 2021-01-25 | Sam |
Después de configurar la fecha como índice:
Nombre | |
---|---|
Fecha | |
2021-01-18 | jia |
2021-01-20 | tania |
2021-01-23 | Rohan |
2021-01-25 | Sam |
- Ahora, una vez que hemos establecido la fecha como índice, convertimos la lista de fechas dada en un objeto DateTime . Originalmente, las fechas de nuestra lista son strings que deben convertirse en el objeto DateTime. Pandas nos proporciona un método llamado to_datetime() que convierte la fecha y la hora en formato de string en un objeto DateTime .
Sintaxis: pandas.to_datetime(arg, errores=’aumentar’, formato=Ninguno)
- El método pd.date_range() acepta una fecha de inicio , una fecha de finalización y crea secuencias de fechas en ese rango.
Sintaxis: pandas.date_range(start=Ninguno, end=Ninguno, freq=Ninguno)
- Pandas.Index.difference() devuelve un nuevo índice con elementos de índice que no están en otros. Por lo tanto, al usar pd.date_range(start date, end date).difference(Date) , obtenemos todas las fechas que no están presentes en nuestra lista de fechas. El tipo de datos devuelto es un tipo de ndarray inmutable de datos datetime64.
Sintaxis: Pandas.Index.difference(other, sort=True)
Ejemplo 1:
Python3
#import pandas import pandas as pd # A dataframe from a dictionary of lists data = {'Date': ['2021-01-18', '2021-01-20', '2021-01-23', '2021-01-25'], 'Name': ['Jia', 'Tanya', 'Rohan', 'Sam']} df = pd.DataFrame(data) # Setting the Date values as index df = df.set_index('Date') # to_datetime() method converts string # format to a DateTime object df.index = pd.to_datetime(df.index) # dates which are not in the sequence # are returned print(pd.date_range( start="2021-01-18", end="2021-01-25").difference(df.index))
Producción:
Finalmente, obtenemos todas las fechas que faltan entre 2021-01-18 y 2021-01-25.
DatetimeIndex([‘2021-01-19’, ‘2021-01-21’, ‘2021-01-22’, ‘2021-01-24′], dtype=’datetime64[ns]’, freq=Ninguno)
Ejemplo 2:
Consideremos otro ejemplo. Sin embargo, esta vez no estableceremos la fecha como índice y asignaremos freq=’B’ (Frecuencia de días hábiles) dentro de la función pd.date_range() .
Al igual que en el ejemplo anterior, hacemos un marco de datos del diccionario de listas. Sin embargo, esta vez no establecemos los valores de fecha como índice. En su lugar, establecemos la columna ‘Total de personas’ como nuestros valores de índice. Usando la función pd.date_range() , que toma la fecha de inicio, la fecha de finalización y la frecuencia como parámetros, proporcionamos los valores. Establecemos la frecuencia = ‘B’ (Frecuencia de días hábiles) para omitir los fines de semana. Finalmente, Pandas.Index.difference() toma la columna Fecha como parámetro y devuelve todos aquellos valores que no están en el conjunto de valores dado.
Python3
#import pandas import pandas as pd # A dataframe from a dictionary of lists d = {'Date': ['2021-01-10', '2021-01-14', '2021-01-18', '2021-01-25', '2021-01-28', '2021-01-29'], 'Total People': [20, 21, 19, 18, 13, 56]} df = pd.DataFrame(d) # Setting the Total People as index df = df.set_index('Total People') # to_datetime() method converts string # format to a DateTime object df['Date'] = pd.to_datetime(df['Date']) # dates which are not in the sequence # are returned my_range = pd.date_range( start="2021-01-10", end="2021-01-31", freq='B') print(my_range.difference(df['Date']))
Producción:
Tenga en cuenta que se devuelven todos los valores faltantes excepto 2021-01-23, 2021-01-24 y 2021-01-30 porque hemos establecido freq=’B’ que omite todos los fines de semana.