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.

Error de clave al acceder a un marco de datos de Pandas en un bucle For

Estoy trabajando con un Pandas dataFrame de un experimento que describe las coordenadas de la mano y la cabeza en realidad virtual (just_trials). En cada prueba, aparece un entorno virtual, luego una pantalla en negro y luego nuevamente un entorno virtual.

Tengo una columna que describe el número de prueba (“staircaseCounterIndex”) y otra columna que describe lo que el sujeto ve: una habitación o una pantalla en negro (“SceneName”).

Por ejemplo:

Dataset's columns

Dado que el conjunto de datos me muestra las coordenadas en milisegundos del movimiento, los valores en SceneName y en staircaseCounterIndex no cambian siempre y cuando la escena no cambie o la prueba haya terminado, respectivamente.
Quiero agregar una nueva columna al conjunto de datos que cuente las veces que el sujeto ha visto la habitación (es decir, después de que aparezca una habitación cuando previamente había una pantalla en negro, se sumará +1 al contador).

A continuación se muestra el código:

step_index = []
first_step = -2
step_num = 0

for i in range(2, np.shape(just_trials)[0]):
    print(i)
    if (first_step == just_trials['staircaseCounterIndex'][i]) and (just_trials['SceneName'][i] == 'Room'): # and just_trials['SceneName'][i-1] == 'Room': ## Aquí está el error ##
        step_index.append(step_num)
    elif just_trials['SceneName'][i] == 'BlackScreen':
        step_index.append(0)
    else:
        step_num += 1
        first_step = just_trials['staircaseCounterIndex'][i]
        step_index.append(step_num)

Mi problema es que cuando intento ejecutar el código, PyCharm encuentra un error en la tercera iteración del bucle For:

La línea donde ocurre el error está marcada en el código anterior.

Error message

Pero cuando ejecuto el depurador, todo funciona bien.

Agradecería tu ayuda.
Paz.

Tags:  , ,

Answer

  1. Avatar for davy.ai

    Solución para agregar una nueva columna al conjunto de datos en Pandas

    El código proporcionado tiene como objetivo contar el número de veces que se ha visto la habitación del sujeto y agregarlo como una nueva columna en el conjunto de datos. Sin embargo, parece que hay un error que ocurre en la tercera iteración del bucle for al verificar si el SceneName es ‘Room’.

    El mensaje de error indica que hay un KeyError: ‘i-1’, lo que significa que el índice ‘i-1’ no existe en el conjunto de datos. Este error ocurre porque el código intenta verificar el SceneName de la fila anterior sin tener en cuenta que puede ser la primera fila de una nueva prueba.

    Para solucionar este error, una solución es verificar si la prueba actual es la primera prueba y establecer el SceneName de la fila anterior como ‘BlackScreen’. Esto asegura que el código siempre verifique el SceneName correcto al contar el número de veces que el sujeto ha visto la habitación.

    Aquí está el código actualizado:

    step_index = []
    first_step = -2
    step_num = 0
    
    for i in range(2, np.shape(just_trials)[0]):
        print(i)
        if (first_step == just_trials['staircaseCounterIndex'][i]) and (just_trials['SceneName'][i] == 'Room') and (just_trials['SceneName'][i-1] == 'BlackScreen'):
            step_num += 1
            step_index.append(step_num)
        elif just_trials['SceneName'][i] == 'BlackScreen':
            step_index.append(0)
        else:
            step_num += 1
            first_step = just_trials['staircaseCounterIndex'][i]
            step_index.append(step_num)
    
    just_trials['RoomCount'] = step_index
    

    Este código ahora debería contar correctamente el número de veces que el sujeto ha visto la habitación y agregarlo como una nueva columna ‘RoomCount’ en el conjunto de datos.

Comments are closed.