将Pandas DataFrame转换为Excel工作表时,删除标题中的默认格式

时间:2019-03-19 16:50:24

标签: python excel pandas dataframe xlsxwriter

这是一次又一次地被回答和重新回答的事情,因为答案随着熊猫的更新而不断变化。我尝试了在网上和其他地方找到的一些解决方案,但没有一个解决方案适用于当前版本的熊猫。有谁知道当前的2019年3月的熊猫0.24.2修复了删除将DataFrame转换为Excel工作表时其标题提供的默认样式的问题?由于存在优先级问题,仅使用xlsxwriter覆盖样式不起作用。

2 个答案:

答案 0 :(得分:1)

在很大程度上基于Xlsxwriter文档(link here)中提供的示例,以下完全可复制的示例删除了熊猫0.24.2中的默认熊猫头格式。值得注意的是,在df.to_excel()中,我正在更改headerstartrow参数。

import xlsxwriter
import pandas as pd
import numpy as np

# Creating a dataframe 
df = pd.DataFrame(np.random.randn(100, 3), columns=list('ABC'))
column_list = df.columns
# Create a Pandas Excel writer using XlsxWriter engine.
writer = pd.ExcelWriter("test.xlsx", engine='xlsxwriter')

df.to_excel(writer, sheet_name='Sheet1', startrow=1, header=False, index=False)

# Get workbook and worksheet objects
workbook  = writer.book
worksheet = writer.sheets['Sheet1']


for idx, val in enumerate(column_list):
    worksheet.write(0, idx, val)

writer.save()

print(pd.__version__)

预期输出:

0.24.2

Expected Output

答案 1 :(得分:1)

关键解释是:pandas用set_cell()写入df的标头。单元格格式(用xlsxwriter来说,“格式”是必须添加到worksheetObject的FormatObject)可以set_row()覆盖。如果您在标题行中使用set_row(),它将无法正常工作,您必须使用set_cell()