格式化 pandas 的 Excel 输出,以设置所有工作表的字体大小、颜色等

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

我正在将多个数据帧写入 Excel 工作簿。我想将所有工作表的默认字体更改为“世纪哥特式”,将大小更改为 9,将颜色更改为蓝色(字体颜色 2659D9)。 我还希望数字列具有会计格式,日期列具有 yyyy-mm-dd 格式。我尝试了下面的代码,但它不起作用。

下面的可执行代码:

import pandas as pd
import numpy as np

df = pd.DataFrame({
        'JDate':["2022-01-31","2022-12-05","2023-11-10","2023-12-03","2024-01-16","2024-01-06","2011-01-04"],
        # 'Month':[1,12,11,12,1,1],
        'Code':[None,'John Johnson',np.nan,'John Smith','Mary Williams','ted bundy','George Lucas'],
        'Unit Price':[np.nan,200,None,56,75,65,60],
        'Quantity':[1500, 140000, 1400000, 455, 648, 759,1000],
        'Amount':[100, 10000, 100000, 5, 48, 59,449],
        'Invoice':['soccer','basketball','baseball','football','baseball','ice hockey','football'],
        'energy':[100.,100,100,54,98,3,45],
        'Category':['alpha','bravo','kappa','alpha','bravo','bravo','kappa']
})

df["JDate"] = pd.to_datetime(df["JDate"])

df["JYearMonth"] =  df['JDate'].dt.to_period('M')


index_to_use = ['Category','Code','Invoice','Unit Price']
values_to_use = ['Amount']
columns_to_use = ['JYearMonth']


df2 = df.pivot_table(index=index_to_use,
                            values=values_to_use,
                            columns=columns_to_use)


df3 = df2.xs('alpha',level='Category')
df3 = df3.reset_index() 


writer= pd.ExcelWriter(
        "t2test13.xlsx",
        engine='xlsxwriter'
    )


df.to_excel(writer,sheet_name="t2",index=True)
df2.to_excel(writer,sheet_name="t2test",index=True)
df3.to_excel(writer,sheet_name="t2filter",index=True)

workbook = writer.book
worksheet = writer.sheets["t2"]

fmt_header = workbook.add_format({
    'bold':True,
    'text_wrap':True,
    'valign':'top',
    'fg_color': '#5DADE2',
    'font_color':'#2659D9',
    'border':1
})


writer.close()
python pandas excel dataframe
1个回答
0
投票

您可以将该部分更改为如下所示,以写入数据帧并同时更改标题格式。

...

writer = pd.ExcelWriter(
    "t2test13.xlsx",
    engine='xlsxwriter'
)

fmt_header = writer.book.add_format({
    'bold': True,
    'text_wrap': True,
    'valign': 'top',
    'fg_color': '#5DADE2',
    'font_color': '#2659D9',
    'border': 1
})

### Create dictionary of Sheet to Dataframe 
sheet_names = {"t2":df, "t2test":df2, "t2filter":df3}

### User a loop to write the dataframe and set that dataframe header formatting
for sheet, dataframe in sheet_names.items():
    dataframe.to_excel(writer, sheet_name=sheet, index=True)
    worksheet = writer.sheets[sheet]
    # Write the column headers with the defined format.
    for col_num, value in enumerate(df.columns.values):
        worksheet.write(0, col_num + 1, value, fmt_header)

writer.close()
© www.soinside.com 2019 - 2024. All rights reserved.