es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Convertir formato de año-semana a fecha en Python.

Tengo un dataframe como el siguiente (estos datos están en BigQuery y el formato del año y semana es %Y%U (las semanas comienzan el domingo):

data = {'yearweek': ['202140', '202139', '202138', '202137'], 'value': [452, 741, 475, 1000]}
df=pd.DataFrame(data)
yearweek value
202140   452
202139   741
202138   475
202137   1000

Resultados esperados:

yearweek value date
202140   452   04-10-2021
202139   741   27-09-2021
202138   475   20-09-2021
202137   1000  13-09-2021

He intentado esto:

df['date'] = pd.to_datetime(df.yearweek + '0', format='%Y-%W%w')

Pero obtengo este error:

ValueError: time data '2021420' does not match format '%Y-%W%w' (match)

También intenté esto:

df['datex'] = pd.to_datetime(df.yearweek, format='%Y%U')

Pero obtengo el mismo error:

ValueError: time data '202142' does not match format '%Y%W%w' (match)
Tags:  , ,

Answer

  1. Avatar for davy.ai

    El error ocurrió debido a que el formato especificado en la función pd.to_datetime() no coincide con el formato de la columna yearweek. Para convertir la columna yearweek en una columna de fecha con el formato específico, puede usar el formato %Y%U directamente en la función pd.to_datetime() de la siguiente manera:

    df['date'] = pd.to_datetime(df['yearweek'] + '0', format='%Y%U%w').dt.strftime('%d-%m-%Y')
    

    Esto convierte la columna yearweek en una columna de fecha y luego la formatea como una cadena con el formato de fecha deseado. La función dt.strftime('%d-%m-%Y') formatea los objetos de fecha y hora como cadenas.

    El dataframe resultante se vería así:

       yearweek  value        date
    0    202140    452  04-10-2021
    1    202139    741  27-09-2021
    2    202138    475  20-09-2021
    3    202137   1000  13-09-2021
    

Comments are closed.