如何对已应用样式方法的pandas Styler对象执行转置操作
你遇到的报错是因为Styler对象和DataFrame属于不同类型,早期pandas版本没有为Styler实现转置方法,无法直接调用.T完成转置,可通过以下两种方案实现需求:
方案1:高版本pandas直接调用转置方法
pandas 1.4.0及以上版本为Styler新增了transpose()方法,.T是该方法的别名,版本符合要求的话直接在链式调用末尾添加即可:
import pandas as pd import numpy as np df2 = pd.DataFrame(np.random.randn(10,4), columns=["A", "B", "C", "D"]) def set_style(v): if v > 0: return "background-color: #ff887c;" elif v < 0: return "background-color: #93d9ad;" df2.style.format(precision=2)\ .applymap(set_style, subset=["A", "C"])\ .hide_columns()\ .transpose()\ .hide(axis="index") # 按需隐藏转置后的行索引
方案2:低版本pandas调整处理顺序
如果使用的pandas版本低于1.4.0,可以先转置原DataFrame,再调整样式的作用范围:
import pandas as pd import numpy as np df2 = pd.DataFrame(np.random.randn(10,4), columns=["A", "B", "C", "D"]) def set_style(v): if v > 0: return "background-color: #ff887c;" elif v < 0: return "background-color: #93d9ad;" # 先转置原数据 df_t = df2.T # 原A、C列转置后变为行,用pd.IndexSlice指定对应行作为样式作用范围 df_t.style.format(precision=2)\ .applymap(set_style, subset=pd.IndexSlice[["A", "C"], :])\ .hide(axis="columns") # 隐藏转置后的列索引
两种方案最终都可以得到4行带样式的结果,同时可以按需隐藏不需要的索引。
内容的提问来源于stack exchange,提问作者Bram Vanroy
相关产品推荐
相关产品推荐

