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.

Presentando Nan’s al concatenar una lista de dataframes

Estoy iterando a través de un marco de datos, haciendo algunos cálculos y luego, dependiendo de la lógica, agregando la serie original o una versión transformada. Para un ERM, omitiré la parte de la transformación.

    # Lista de tuplas
    students = [('Ankit', 22, 'A'),
               ('Swapnil', 22, 'B'),
               ('Priya', 22, 'B'),
               ('Shivangi', 22, 'B'),
              ]

    # Crear un objeto DataFrame
    stu_df = pd.DataFrame(students, columns =['Nombre', 'Edad', 'Sección'],
                          index =['1', '2', '3', '4'])

    returnList = []

    for i, (nombre_col, serie) in enumerate(stu_df.iteritems()):
        returnList.append(pd.DataFrame(serie))

    a = pd.concat(returnList)

El índice es consistente en todas las series, entonces, ¿por qué no se reconoce correctamente?
a se ve así, pero debería alinearse para que se vea como los datos originales:

| índice | Nombre   | Edad | Sección |
|-------|---------|------|---------|
| 1     | Ankit   | NaN  | NaN    |
| 2     | Swapnil | NaN  | NaN    |
| 3     | Priya   | NaN  | NaN    |
| 4     | Shivangi| NaN  | NaN    |
| 1     | NaN     | 22.0 | NaN    |
| 2     | NaN     | 22.0 | NaN    |
| 3     | NaN     | 22.0 | NaN    |
| 4     | NaN     | 22.0 | NaN    |
| 1     | NaN     | NaN  | A      |
| 2     | NaN     | NaN  | B      |
| 3     | NaN     | NaN  | B      |
| 4     | NaN     | NaN  | B      |
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    El índice no está siendo reconocido correctamente porque cuando estás agregando la serie a returnList, estás creando un nuevo DataFrame para cada serie con el mismo nombre de columna que el DataFrame original, lo que resulta en la creación de nuevos índices para cada DataFrame. Por lo tanto, cuando los concatenas usando pd.concat(), los índices no se alinean correctamente.

    Para solucionar esto, puedes resetear el índice de cada serie antes de agregarlos a returnList, de modo que cada DataFrame agregado tenga un índice consistente. Puedes hacer esto agregando .reset_index(drop=True) a la llamada de pd.DataFrame() dentro del bucle for:

    for i, (nombre_columna, serie) en enumerate(stu_df.iteritems()):
        returnList.append(pd.DataFrame(serie).reset_index(drop=True))
    

    Esto establecerá el índice de cada DataFrame agregado en un rango consistente desde 0 hasta la longitud de la serie – 1, y luego cuando los concatenes, los índices se alinearán correctamente.

Comments are closed.