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.

Cambiando el año de una rebanada/serie obtenida de un dataframe de pandas

Tengo un conjunto de datos grande que es el horario importado (abarcando varios años) para mi equipo. Limpié los datos (los hice largos en lugar de anchos), sin embargo, encuentro un problema.

Primero una explicación de los datos:
– ‘año’ y ‘período’ se obtienen de la hoja dividida. Ambas son cadenas.

  • ‘semana’ la semana del año, obtenida de la lista. Float.

  • ‘fecha’ convertida de la cadena, para lo cual escribí una función ya que las fechas estaban en holandés y necesitaban normalizarse, no se definió el año, por lo que se usa el año de la primera columna. Después del procesamiento; formato de fecha y hora.

  • ‘turno’ el tipo de turno al que pertenece. S1> temprano, S2> tarde, S3> noche.

  • Cada regla se asigna a uno de mis empleados, se borran esos nombres por motivos de privacidad.

  • He escrito una clase con varios métodos que aplican las reglas que nuestro gobierno impone en los horarios.

Ahora mi problema:

Como puede ver: las entradas 1137 y 1138 deberían pertenecer al año 2022. Pero, ¿cómo puedo cambiar esto fácilmente? Intenté:

for week, date in prepocessed_data_merged[[‘week’, ‘date’]].values:
# Siempre hay más de 52 semanas en un año.
# Si el mes de la fecha en la semana 52 es 1 (enero), algo está mal.
if (week == 52) and (date.month == 1):
prepocessed_data_merged.loc[(prepocessed_data_merged[‘week’] == week)
& (prepocessed_data_merged[‘date’]), ‘date’] = ???

Pero como puede esperar, esto devuelve una serie ya que hay tres turnos en un día, por lo que tres entradas de una fecha que necesitan cambiar su año. Entonces, ¿cómo se cambia el año de una serie / slice seleccionada, cambiándola simultáneamente en el dataframe?

Sé que puedo usar: dt.replace (año = año_actual + 1) pero, ¿cómo impongo este ‘reemplazo’ en esta serie /slice seleccionada en el DF preprocesado? ¡Gracias de antemano!

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Una forma de cambiar el año de una serie o rebanada seleccionada en el DF preprocessed_data es utilizar el método .loc junto con el accesor .dt para modificar los valores de fecha y hora en el lugar. Aquí tienes un ejemplo:

    # Definir el año actual y el deseado
    current_year = 2021
    new_year = 2022
    
    # Crear una máscara booleana para las filas que deben actualizarse
    mask = (prepocessed_data_merged['week'] == 52) & (prepocessed_data_merged['date'].dt.month == 1)
    
    # Usar .loc para seleccionar los valores de fecha y hora y actualizar el año
    prepocessed_data_merged.loc[mask, 'date'] = prepocessed_data_merged.loc[mask, 'date'].dt.replace(year=new_year)
    
    # Verificar los cambios
    print(prepocessed_data_merged.loc[1136:1139])
    

    Este código seleccionará las filas donde la semana es 52 y el mes es enero, lo que corresponde a las entradas que necesitan tener su año actualizado. Luego, utiliza .loc para seleccionar los valores de fecha y hora (columna ‘date’) en estas filas y aplicar el método replace con el nuevo año. Finalmente, imprime las filas actualizadas para verificar que los cambios se aplicaron correctamente.

Comments are closed.