【问题标题】:Why does pandas Styler 'to_excel' method not save percent formatting?为什么 pandas Styler 'to_excel' 方法不保存百分比格式?
【发布时间】:2020-09-14 13:19:23
【问题描述】:

我正在使用 pandas Styler 类将某些列格式化为百分比。当我将输出写入 excel 时,列仍显示为浮点数。为什么我可以正确格式化和保存颜色,但不能正确设置百分比?

import pandas as pd
import numpy as np

def color_negative_red(val):
    color = 'red' if val < 0 else 'black'
    return 'color: %s' % color

np.random.seed(24)
df = pd.DataFrame({'A': np.linspace(1, 10, 10)})
df = pd.concat([df, pd.DataFrame(np.random.randn(10, 4), columns=list('BCDE'))],axis=1)

这会产生这个:

df.style.format('{:.2%}').applymap(color_negative_red)

但保存到 excel 会将百分比恢复为浮点数:

df.style.format('{:.2%}').applymap(color_negative_red).to_excel('format_test.xlsx')

怎么办?

【问题讨论】:

  • 为什么不在 Excel 中选择“百分比”作为数字格式?
  • 这不是违背了编写脚本的目的吗?此任务重复完成..
  • 好吧,如果你想用它做进一步的计算,它不是百分比的格式也没关系。如果 pandas 用百分号保存你的数据,它会是一个字符串的形式——对吧?在这种情况下,您无法进一步处理它。如果您希望它看起来像一个百分比,您当然也可以将所有内容乘以 100,但当然同样的事情也适用 - 您将无法进一步计算,因为您已经扭曲了数据。跨度>
  • 我不打算做进一步的计算。我正在将它写入磁盘,以便其他人可以查看它。它每周完成一次,我不想费心手动格式化它。对不起,无论出于何种原因,我的问题冒犯了你。已创建 Styler 类来格式化数据帧,这不是预期的行为。我认为不需要任何进一步的解释。

标签: python pandas dataframe pandas-styles


【解决方案1】:

你可能想看看openpyxl,例如通过这个线程 Writing Percentages in Excel Using Pandas

【讨论】:

    【解决方案2】:

    百分比格式的建议解决方法:

    with pd.ExcelWriter('test_format.xlsx') as writer:
        df.to_excel(writer, sheet_name='Sheet1', index=False)
        percent_format = writer.book.add_format({'num_format': '0.00%'})
        worksheet = writer.book.worksheets_objs[0]
        for col in ['A','C','E']:
            worksheet.set_column(f'{col}:{col}', None, percent_format)
    

    确实在 A、C 和 E 列中添加百分比。

    但是,它仅适用于 DataFrame 对象,不能与 Styler 一起使用,这意味着,所有其他格式都需要使用 writer 对象完成:

    with pd.ExcelWriter('test_format.xlsx') as writer:
        df.style.applymap(color_negative_red).to_excel(writer, sheet_name='Sheet1', index=False)
        percent_format = writer.book.add_format({'num_format': '0.00%'})
        worksheet = writer.book.worksheets_objs[0]
        for col in ['A','C','E']:
            worksheet.set_column(f'{col}:{col}', None, percent_format)
    

    【讨论】:

      猜你喜欢
      • 2022-11-15
      • 1970-01-01
      • 2019-01-14
      • 2010-10-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-04-11
      相关资源
      最近更新 更多