【问题标题】:Formatting numbers after coloring dataframe using Styler (pandas)使用 Styler (pandas) 为数据框着色后格式化数字
【发布时间】:2021-02-18 14:28:09
【问题描述】:

我在 pandas 中创建了一个 DataFrame,我想使用颜色索引为单元格着色(低值红色,高值绿色)。我成功地这样做了,但是着色使我无法格式化单元格。

import pandas as pd

df = pd.DataFrame({'a': [0.5,1.5, 5],
                   'b': [2, 3.5, 7] })

df = df.style.background_gradient(cmap='RdYlGn')
df

返回

但是,当我尝试使用df.round(2) 来格式化数字时,会弹出以下错误:

AttributeError: 'Styler' object has no attribute 'round'

有没有人可以告诉我出了什么问题?

【问题讨论】:

    标签: python pandas dataframe formatting pandas-styles


    【解决方案1】:

    看看pandas styling guidedf.style 属性返回 Styler 实例,而不是数据框。从 pandas 样式指南中的示例来看,似乎数据框操作(如舍入)是先完成的,而样式是最后完成的。 pandas 样式指南中有a section on precision。该部分提出了三种不同的选项来显示值的精度。

    import pandas as pd
    
    df = pd.DataFrame({'a': [0.5,1.5, 5],
                       'b': [2, 3.5, 7] })
    
    # Option 1. Round before using style.
    style = df.round(2).style.background_gradient(cmap='RdYlGn')
    style
    
    # Option 2. Use option_context to set precision.
    with pd.option_context('display.precision', 2):
        style = df.style.background_gradient(cmap='RdYlGn')
    style
    
    # Option 3. Use .set_precision() method of styler.
    style = df.style.background_gradient(cmap='RdYlGn').set_precision(2)
    style
    

    【讨论】:

    • 选项 1 对我不起作用,但 2 和 3 正是我想要的。非常感谢!
    • 很高兴听到这个消息。如果此答案解决了您的问题,请点击绿色复选标记将其标记为正确。
    • 方法 '.set_precision' 在当前的 Pandas 版本 (v1.3.1) 中已弃用。新方法通过“.format(precision = 2)”传递浮点精度。但是,我遇到了这个问题,不得不恢复到以前的 Pandas 版本。我尝试了文档中所述的各种方法,但我无法让它工作。可能与我使用 3.7.7 的旧 Python 版本不一致。
    猜你喜欢
    • 2019-12-05
    • 2018-10-21
    • 1970-01-01
    • 1970-01-01
    • 2020-06-15
    • 1970-01-01
    • 2018-11-18
    • 2018-09-09
    相关资源
    最近更新 更多