我正在尝试格式化我的 df,以便数据有 4 个小数位,但它也不断格式化我的标题。 worksheet.add_format() 时是否可以跳过第一行?
数据框:
DateReferencia 2023 2024 2025 2026 2027 2028
Date
02/01/2024 2.9233 1.5500 2.0 2.0 2.0 NaN
03/01/2024 2.9233 1.5500 2.0 2.0 2.0 NaN
04/01/2024 2.9313 1.5872 2.0 2.0 2.0 NaN
05/01/2024 2.9221 1.5872 2.0 2.0 2.0 NaN
08/01/2024 2.9208 1.5922 2.0 2.0 2.0 NaN
格式化并将 df 发送到 Excel 的代码:
writer = pd.ExcelWriter("pandas_column_formats.xlsx", engine="xlsxwriter")
df.to_excel(writer, sheet_name='Sheet1')
workbook = writer.book
worksheet = writer.sheets["Sheet1"]
format1 = workbook.add_format({"num_format": "0.0000"})
worksheet.set_column(1,len(df), None, format1)
writer.close()
输出:
DateReferencia 2,023.0000 2,024.0000 2,025.0000 2,026.0000 2,027.0000 2,028.0000
Date
02/01/2024 2.9233 1.5500 2.0000 2.0000 2.0000
03/01/2024 2.9233 1.5500 2.0000 2.0000 2.0000
04/01/2024 2.9313 1.5872 2.0000 2.0000 2.0000
05/01/2024 2.9221 1.5872 2.0000 2.0000 2.0000
08/01/2024 2.9208 1.5922 2.0000 2.0000 2.0000
pandas
已经将一些单元格格式应用于标题和行,因此您应该检查此官方页面:https://xlsxwriter.readthedocs.io/working_with_pandas.html#formatting-of-the-dataframe-headers(TLDR :先写入不带标题的数据,然后添加自定义格式的标题)
我无法使用您提供的代码复制您的问题,因此它也可能特定于您正在使用的
pandas
和 xlsxwriter
的版本。您可以尝试以下步骤:
df.columns = df.columns.astype(str)
)df = df.applymap(lambda x: f"{x:.4f}" if isinstance(x, (int,float)) else x)
)