Comprobar fechas faltantes en Pandas

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)

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.

Publicación traducida automáticamente

Artículo escrito por nityaak5 y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *