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

遍历Pandas DataFrame行时使用shift()报错,求迭代下的解决方法

解决'numpy.int64' object has no attribute 'shift'并保留迭代获取最后符合条件索引

你报错的核心原因是iterrows()返回的row里的单个元素是numpy数值类型,而shift()是pandas Series/DataFrame专属的方法,单个数值自然没有这个属性。

要保留迭代逻辑的话,先提前对整个B列做shift处理,把结果存下来,之后在迭代时直接用预处理好的值判断即可,同时用变量记录最后一个符合条件的索引:

import pandas as pd

df = pd.DataFrame([[0, 2, 3], [0, 4, 1], [10, 20, 30]],
                  columns=['A', 'B', 'C'])

# 提前计算B列shift(1)的结果,生成新列
df['B_shifted'] = df['B'].shift(1)
last_valid_idx = None

for index, row in df.iterrows():
    # 排除shift后产生的NaN值(第一行无前置数据),再做数值判断
    if pd.notna(row['B_shifted']) and row['B_shifted'] >= 4:
        last_valid_idx = index

# 打印最后一个符合条件的索引
if last_valid_idx is not None:
    print(last_valid_idx)

如果不想新增列,也可以直接通过Series索引取值:

import pandas as pd

df = pd.DataFrame([[0, 2, 3], [0, 4, 1], [10, 20, 30]],
                  columns=['A', 'B', 'C'])

b_shifted = df['B'].shift(1)
last_valid_idx = None

for index, row in df.iterrows():
    shifted_val = b_shifted[index]
    if pd.notna(shifted_val) and shifted_val >= 4:
        last_valid_idx = index

print(last_valid_idx if last_valid_idx is not None else "无符合条件的索引")

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.11 14:45:28