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

Pandas列名循环遍历报错求助:AttributeError问题排查

解决Pandas遍历列名时的AttributeError问题

首先,咱们先聊聊你遇到的AttributeError: 'DataFrame' object has no attribute 'I'错误——这大概率是你在循环里用了点号.来访问列,但点号只能用于固定的列名(比如clear.col1),当你用变量(比如i)指代列名时,Pandas会把这个变量名当成DataFrame的属性去查找,自然找不到就报错了。

错误代码示例(你可能写了类似这样的)

lista = list()
for i in clear.columns:
    # 这里用了clear.i,Pandas会去找clear的i属性,而不是列名为i的列
    count = clear[clear.i > lock.i.max()].shape[0]
    lista.append((i, count))

正确的循环实现方式

改用**方括号[]**来通过变量访问列,这样Pandas就会正确识别你要访问的是对应列名的列:

lista = list()
# 遍历列名,因为clear和lock列名一致,遍历其中一个的columns就行
for col in clear.columns:
    # 用col变量通过方括号访问列
    threshold = lock[col].max()
    count = clear[clear[col] > threshold].shape[0]
    lista.append((col, count))

更简洁的列表推导式写法

如果你想让代码更紧凑,可以用列表推导式一步完成:

lista = [(col, clear[clear[col] > lock[col].max()].shape[0]) for col in clear.columns]

额外优化:用sum()替代shape[0]

其实统计布尔序列的True数量,用sum()会更直观(因为True等价于1,False等价于0),效果和shape[0]完全一致:

lista = [(col, (clear[col] > lock[col].max()).sum()) for col in clear.columns]

这样写不仅代码更短,可读性也更好~

内容的提问来源于stack exchange,提问作者Darnok kkk

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 15:47:32