Pandas DataFrame to_excel 方法将标题行向右移动

问题描述 投票:0回答:3

我正在使用 Python 中的 Pandas 库尝试将 DataFrame 的内容导出到 Excel 文件。

我已将 DataFrame 中的标头重命名为 Field1、Field2、Field3,因此它看起来像这样:

     Field1  Field2  Field3

0     X        X       X

1     X        X       X

2     X        X       X

3     X        X       X

当我将其导出到 Excel 时,我希望它看起来像这样:

Field1  Field2  Field3

X        X       X

X        X       X

X        X       X

X        X       X

我认为使用 index=False 作为 DataFrame.to_excel() 的参数就可以做到这一点,但结果却像这样:

       Field1  Field2  Field3

X        X       X

X        X       X

X        X       X

X        X       X

如您所见,标题已移至右侧。

这是实际输出的图片:

DataFrame 导出到 Excel .xlsx 文件

这是我的代码:

def exportToExcel():
    master_inventory_checks_workbook="C:/Users/holmpa3/My Project/Sangeetha_Work_Files_1/INVENTORY_CHECKS.xlsx"
    shutil.copy2("C:/Users/holmpa3/My Project/Sangeetha_Work_Files_1/DATA_DEFS/INVENTORY_CHECKS_TMPL.xlsx", master_inventory_checks_workbook) #copy
    
    mycursor.execute("SELECT * FROM UNQ_FIELDS_LIST")
    table=pd.DataFrame(mycursor.fetchall()) 
    
    mycursor.execute("SELECT column_name from INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'UNQ_FIELDS_LIST'")
    
    column_names=mycursor.fetchall()
    table.columns=column_names

    book = openpyxl.load_workbook(master_inventory_checks_workbook) #loads workbook
    writer = pd.ExcelWriter(master_inventory_checks_workbook, engine='openpyxl' )
    writer.book = book 
    writer.sheets=dict((ws.title, ws) for ws in book.worksheets) 

    print(writer.sheets)
    print(writer.sheets['UNQ_FIELDS_LIST'])

    table.to_excel( writer, 'UNQ_FIELDS_LIST',index=False)

    writer.save()

我已经尝试解决这个问题几个小时了,现在做了各种各样的事情,但没有任何效果。

如何将 DataFrame 输出到 Excel,以使标题不会向右移动?

python excel pandas dataframe openpyxl
3个回答
1
投票

对我来说,问题是行上的“隐藏”多重索引,这是我构建数据框的副作用。使用

reset_index()
删除 MultiIndex 解决了问题。


0
投票

我知道这不是很干净,但一种选择是对数据框使用空索引,如下所示:

table=pd.DataFrame(mycursor.fetchall(),index=['','','']) 

可能有更好的解决方案,但它有效


0
投票

对我来说,问题是我错误地创建了一个嵌套列表作为列名称。 所以我的专栏不是

['col1', 'col2', 'col3']

但是,

[['col1', 'col2', 'col3']]

这在列上创建了 MultiIndex,而不是在行上。基本上对 .display() 不可见,但在另存为 Excel 文件时出现了与 OP 相同的问题。

在这种特定情况下的修复方法是,

df.columns = df.columns.get_level_values(0)

但真正的解决办法是纠正错误。

© www.soinside.com 2019 - 2024. All rights reserved.