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

迭代为Pandas DataFrame新增列时,‘string index out of range’错误的成因

问题分析与解决

原代码触发"string index out of range"错误的核心原因:

  • 错误将value[n+1]当成下一行的type值,但value是当前行的type字符串,value[n+1]实际是取该字符串的第n+1个字符,当字符串长度不足时就会报错。
  • 循环逻辑混乱:遍历所有行时用n计数,判断条件n < 56107和实际行数51108不符,且未处理最后一行(无下一行的情况)。

正确实现方式

用Pandas内置的shift()方法可以高效获取下一行的type值,无需手动循环,代码简洁且性能更优:

# 获取下一行的type值,最后一行无下一行,结果为NaN
next_type = df['type'].shift(-1)

# 根据下一行type值设置metric列:下一行是Shot设为1,是Pass设为0,其余情况设为None(可按需调整)
df['metric'] = None
df.loc[next_type == 'Shot', 'metric'] = 1
df.loc[next_type == 'Pass', 'metric'] = 0

也可以用numpy.where简化为一行代码:

import numpy as np

next_type = df['type'].shift(-1)
df['metric'] = np.where(next_type == 'Shot', 1, 
                        np.where(next_type == 'Pass', 0, None))

关键说明

  • shift(-1)会将type列整体上移一位,当前行的next_type就对应下一行的type值,最后一行的next_type为NaN,可根据需求设置默认值(比如设为0或保留NaN)。
  • 这种向量化操作比手动循环效率高数倍,尤其适合处理几万行级别的DataFrame。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.21 02:33:28