Transformar un diccionario con valores en formato ddmmYYYY en un Dataframe con conteos por mmYYYY en columnas.
Me gustaría transformar el siguiente diccionario:
x = {
'John': ['1.12.2021','2.12.2021','3.02.2022','4.2.2022','5.07.2022','6.07.2022','7.12.2022','8.12.2022'],
'Andrew': ['1.12.2021','2.03.2022','3.03.2022','4.05.2022','5.05.2022','6.09.2022','7.09.2022','8.11.2022','9.12.2022','10.12.2022']
}
en un DataFrame como este, con columnas que mostrarán la cuenta por mes:
Name 12.2021 02.2022 03.2022 05.2022 07.2022 09.2022 11.2022 12.2022
0 John 2 2 0 0 2 0 0 0
1 Andrew 1 0 2 2 0 2 1 2
Comencé con esto, transformando los valores en datetimes:
x = pd.DataFrame.from_dict(x, 'index').reset_index().fillna(value='0')
x.iloc[:,1:] = pd.to_datetime(x.iloc[:,1:], format='%d.%m.%Y')
print(x)
Pero obtengo este error: AttributeError: ‘int’ object has no attribute ‘lower’
davy.ai
El error es causado por la parte del código
fillna(value='0')
, que convierte todos los valores faltantes en la cadena de texto'0'
. Como este valor no se puede convertir en un objeto de fecha y hora, el métodopd.to_datetime()
arroja un error.Para solucionar esto, simplemente podemos eliminar el método
fillna()
y dejar que Pandas maneje los valores faltantes de forma predeterminada. Alternativamente, podemos reemplazar los valores faltantes por un valorNaN
, que se puede convertir en un objeto de fecha y hora. Aquí está el código actualizado:Salida:
Ahora podemos proceder a transformar los datos en el formato deseado:
Salida: