You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用Pandas style.applymap()给列单元格上色时遇'int'无index属性错误

问题原因与解决方案

错误根源

你触发的AttributeError: 'int' object has no attribute 'index',核心原因是误用了applymap()方法:
applymap()是逐单元格执行函数的,传给highlight_col的参数x是单个单元格的值(比如10、"Rahul"这类),而不是整个DataFrame或Series,自然没有index属性。

另外你的代码还有两个隐性问题:

  • 切片逻辑错误:df.iloc[i:1, 0]当i>0时是空区间,根本定位不到目标行
  • 索引越界:lst里的5超出了df1的行索引范围(df1只有0-4共5行)

修正方案

根据你的需求——给指定列的部分行(按行索引列表)设置红色,应该使用style.apply()(按行/列/整个DataFrame处理),以下是两种可行写法:

方案1:针对整个DataFrame设置指定列样式

def highlight_col(df, lst, col_idx=0):
    # 初始化样式DataFrame,默认无样式
    style_df = pd.DataFrame('', index=df.index, columns=df.columns)
    # 遍历目标行索引,给指定列设置红色
    for i in lst:
        if i < len(df):  # 避免索引越界
            style_df.iloc[i, col_idx] = 'color: red'
    return style_df

df1 = pd.DataFrame({'id':[10,11,12,13,14], 'name':['Rahul', 'Ravi', 'Mike', 'Nair', 'Mona'], 'age':[30,40,23,45,12], 'street_no':['E112', 'B115', 'C119', 'H112', 'J091']})

lst = (1, 3)  # 去掉超出范围的索引5
style1 = df1.style.apply(highlight_col, lst=lst, col_idx=0, axis=None)

style1
  • axis=None让函数接收整个DataFrame作为参数
  • 直接用iloc[i, col_idx]精准定位目标单元格
  • 增加索引越界判断,避免无效索引报错

方案2:仅针对指定列设置样式

如果只需要给某一列(比如id列)设置样式,可以更简洁:

def highlight_col(series, lst):
    style = ['']*len(series)
    for i in lst:
        if i < len(series):
            style[i] = 'color: red'
    return style

df1 = pd.DataFrame({'id':[10,11,12,13,14], 'name':['Rahul', 'Ravi', 'Mike', 'Nair', 'Mona'], 'age':[30,40,23,45,12], 'street_no':['E112', 'B115', 'C119', 'H112', 'J091']})

lst = (1, 3)
style1 = df1.style.apply(highlight_col, lst=lst, subset=['id'])

style1
  • 通过subset=['id']指定仅对该列应用样式
  • 函数接收该列的Series,返回对应长度的样式列表

内容的提问来源于stack exchange,提问作者Rafi Ansari

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.25 18:32:06