我正在使用 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
如您所见,标题已移至右侧。
这是实际输出的图片:
这是我的代码:
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,以使标题不会向右移动?
对我来说,问题是行上的“隐藏”多重索引,这是我构建数据框的副作用。使用
reset_index()
删除 MultiIndex 解决了问题。
我知道这不是很干净,但一种选择是对数据框使用空索引,如下所示:
table=pd.DataFrame(mycursor.fetchall(),index=['','',''])
可能有更好的解决方案,但它有效
对我来说,问题是我错误地创建了一个嵌套列表作为列名称。 所以我的专栏不是
['col1', 'col2', 'col3']
但是,
[['col1', 'col2', 'col3']]
这在列上创建了 MultiIndex,而不是在行上。基本上对 .display() 不可见,但在另存为 Excel 文件时出现了与 OP 相同的问题。
在这种特定情况下的修复方法是,
df.columns = df.columns.get_level_values(0)
但真正的解决办法是纠正错误。