如何在Pandas Styler对象中添加%符号?
解决Pandas Styler对象指定列添加百分比符号的问题
问题场景
将DataFrame中CPU、Memory列的百分比字符串转为整数用于计算后,通过applymap和apply设置了单元格高亮与行高亮,得到Styled_df。尝试通过styled_df['CPU', 'Memory'] = styled_df['CPU', 'Memory'] + '%'为指定列添加%符号时,触发错误:
TypeError: 'Styler' object is not subscriptable
错误原因
Pandas的Styler对象是用于表格样式渲染的包装器,不支持像原生DataFrame那样通过下标([])直接修改数据或显示内容,必须使用Styler提供的专用方法来调整显示格式。
解决方案
使用Styler的format()方法,针对指定列设置显示格式,即可在保留原有高亮样式的同时,为数值添加%符号。
修改后的完整代码
import pandas as pd data = {'CPU': ['80%', '60%', '90%'], 'Memory': ['90%', '70%', '60%'], 'MARKING': [1, 0, 1]} df = pd.DataFrame(data) # 转换百分比字符串为整数用于计算 df[['CPU', 'Memory']] = df[['CPU', 'Memory']].replace('%', '', regex=True).astype(int) def highlight_cells(val, threshold): if val > threshold: return 'color: red' return '' def highlight_row(row): if row['MARKING'] == 1: return ['background-color: yellow'] * len(row) return [''] * len(row) # 链式调用format方法为指定列添加%符号,同时保留高亮样式 styled_df = (df.style.applymap(lambda x: highlight_cells(x, 35), subset=['CPU']) .applymap(lambda x: highlight_cells(x, 38), subset=['Memory']) .apply(highlight_row, axis=1) # 为CPU、Memory列设置显示格式,添加%符号 .format(lambda x: f"{x}%", subset=['CPU', 'Memory'])) # 保存带样式和百分比符号的输出 with pd.ExcelWriter('styled_output.xlsx', engine='openpyxl') as writer: styled_df.to_excel(writer, sheet_name='Styled', index=False)
关键说明
format()方法支持通过subset参数指定要格式化的列,避免影响其他列的显示- 可以使用格式化字符串(如
"{:.0f}%")或lambda函数来控制数值的显示格式,这里因为数值已经是整数,直接拼接%即可
内容的提问来源于stack exchange,提问作者catbug
相关产品推荐
相关产品推荐

