如果在 python 中指定 pandas 的背景颜色,数字格式将被禁用

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

对 pandas 中的数据进行排序后,我将其保存在 Excel 中。这个时候我们正在尝试通过改变格式来提高可读性。我同时指定了数字格式和背景颜色,但只指定了两者之一,出现错误。我很确定这不是一个错误,这只是“我不太理解”。但我不知道我哪里做错了。我希望得到您的帮助。

下面是我编写的示例代码以及运行结果。第一个代码是我格式化数字时的。可以正常使用。

df = pd.DataFrame({
    'Name': ['John', 'Isac'],
    'Value': [100000, 300000000]
})

with pd.ExcelWriter('test.xlsx', engine='xlsxwriter') as writer:
    df.to_excel(writer, sheet_name='test', index=False)
    
    workbook = writer.book
    worksheet = writer.sheets['test']
    
    format_with_commas = workbook.add_format({'num_format':'#,##0'})
    worksheet.set_column('B:B', 15, format_with_commas)

但是,问题是,如果在这里编写代码指定背景颜色,数字格式就不起作用了。我已将代码和执行结果作为图像包含在内。

df = pd.DataFrame({
    'Name': ['John', 'Isac'],
    'Value': [100000, 300000000]
})

styled_df = df.style.set_properties(**{'background-color':'yellow', 'color':'black'})

with pd.ExcelWriter('test.xlsx', engine='xlsxwriter') as writer:
    styled_df.to_excel(writer, sheet_name='test', index=False)
    
    workbook = writer.book
    worksheet = writer.sheets['test']
    
    format_with_commas = workbook.add_format({'num_format':'#,##0'})
    worksheet.set_column('B:B', 15, format_with_commas)

如果我的方法不正确,请告诉我哪里错了。或者,如果此代码已过时,也请指出。

python pandas xlsxwriter
1个回答
0
投票

我认为你只能使用 pandas 样式解决方案,但如果检查

Styler.format
:

使用输出格式 Styler.to_excel 时,Styler.format 会被忽略,因为 Excel 和 Python 具有本质上不同的格式结构。但是,可以使用数字格式伪 CSS 属性来强制使用 Excel 允许的格式。查看示例。

所以尝试number-format伪CSS属性,参见最后一段:

styled_df = df.style.set_properties(**{'background-color':'yellow', 'color':'black'})

pseudo_css = 'number-format: #,##0'

with pd.ExcelWriter('test.xlsx', engine='xlsxwriter') as writer:
    (styled_df.map(lambda  v: pseudo_css, subset=['Value'])
              .to_excel(writer, sheet_name='test', index=False))

对于较旧的 pandas 版本:

styled_df = df.style.set_properties(**{'background-color':'yellow', 'color':'black'})

pseudo_css = 'number-format: #,##0'

with pd.ExcelWriter('test.xlsx', engine='xlsxwriter') as writer:
    (styled_df.applymap(lambda  v: pseudo_css, subset=['Value'])
              .to_excel(writer, sheet_name='test', index=False))
© www.soinside.com 2019 - 2024. All rights reserved.