解决Pandas Style报错:ValueError: style不支持非唯一索引
解决DataFrame样式应用时的"ValueError: style is not supported for non-unique indices"错误
这个错误我之前也碰到过,本质原因是你的df05存在重复的索引值——Pandas的style模块要求索引必须是唯一的,因为它需要通过索引精准定位每个单元格来应用样式。下面给你几个实用的解决思路:
第一步:先确认问题根源
先运行这段代码验证你的DataFrame是否真的有重复索引:
print(df05.index.duplicated().any())
如果输出True,就坐实了是重复索引导致的问题。
第二步:选择适合你的解决方案
方案1:重置索引(最简单直接)
如果原来的索引对你来说不重要,直接重置成唯一的整数索引即可:
df05 = df05.reset_index(drop=True)
这会丢弃原有索引,生成从0开始的连续唯一索引,之后再运行你的颜色样式代码就不会报错了。
方案2:保留原有索引,删除重复行
如果你需要保留原有索引,但可以接受删除重复的行,那么可以选择保留第一次出现的行:
df05 = df05[~df05.index.duplicated(keep='first')]
或者保留最后一次出现的行:
df05 = df05[~df05.index.duplicated(keep='last')]
方案3:修改重复索引,使其唯一
如果既想保留原有索引的信息,又不想删除行,可以给重复的索引添加后缀来区分:
from itertools import groupby new_index = [] for idx, group in groupby(df05.index): count = 0 for _ in group: # 第一次出现的索引保持原样,后续重复的添加序号后缀 new_index.append(f"{idx}_{count}" if count > 0 else idx) count += 1 df05.index = new_index
第三步:验证并重新运行样式代码
处理完索引后,先确认索引已经唯一:
print(df05.index.is_unique)
当输出True时,就可以重新执行你的颜色设置代码了,另外建议用display(s)代替print(s),这样能在Jupyter环境中正确渲染样式:
def color_negative_red(val): """ Takes a scalar and returns a string with the css property `'color: red'` for negative strings, black otherwise. """ color = 'red' if val < 0 else 'black' return 'color: %s' % color s = df05.style.applymap(color_negative_red) display(s)
内容的提问来源于stack exchange,提问作者Metroll
相关产品推荐
相关产品推荐

