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.

¿Cómo evitar escribir una fila vacía al guardar un DataFrame con múltiples encabezados en un archivo de Excel?

Me gustaría guardar un DataFrame con múltiples encabezados en un archivo de Excel. A continuación se muestra el código de muestra:

import pandas as pd
import numpy as np

header = pd.MultiIndex.from_product([['ubicación1','ubicación2'],
                                     ['S1','S2','S3']],
                                    names=['loc','S'])

df = pd.DataFrame(np.random.randn(5, 6), 
                  index=['a','b','c','d','e'], 
                  columns=header)

df.to_excel('resultado.xlsx')

Hay dos problemas en el archivo de Excel, como se puede ver a continuación:

imagen

Problema 1:

Hay una fila vacía debajo de los encabezados. Por favor, hágame saber cómo evitar que Pandas escriba / inserte una fila vacía en el archivo de Excel.

Problema 2:

Quiero guardar el DataFrame sin índice. Sin embargo, cuando establezco index=False, obtengo el siguiente error:

 df.to_excel('resultado.xlsx', index=False)

Error:

NotImplementedError: Todavía no se ha implementado escribir en Excel con columnas de MultiIndex y sin índice ('index'=False).
Tags:  , , ,

Answer

  1. Avatar for davy.ai

    Para evitar la fila vacía debajo de los encabezados, necesitas establecer index=False y el parámetro startrow en to_excel como 1. Esto comenzará a escribir el DataFrame desde la segunda fila y evitará la fila vacía. Aquí está el código actualizado:

    import pandas as pd
    import numpy as np
    
    header = pd.MultiIndex.from_product([['location1','location2'],
                                         ['S1','S2','S3']],
                                        names=['loc','S'])
    
    df = pd.DataFrame(np.random.randn(5, 6), 
                      index=['a','b','c','d','e'], 
                      columns=header)
    
    df.to_excel('result.xlsx', index=False, startrow=1)
    

    Para guardar el DataFrame sin índice, puedes establecer index=False como se muestra arriba. Sin embargo, actualmente esto no funciona con columnas de MultiIndex. Una solución alternativa es restablecer las columnas antes de guardar el DataFrame en Excel:

    df.columns = df.columns.to_flat_index() # Restablece las columnas MultiIndex a un índice regular
    df.to_excel('result.xlsx', index=False, startrow=1)
    

    Esto guardará el DataFrame sin índice y sin la fila vacía debajo de los encabezados.

Comments are closed.