数据标注时if语句出现'int'对象不可下标TypeError问题求助
解决TypeError: 'int' object is not subscriptable问题
嘿,我来帮你搞定这个报错!这个错误的核心原因很明确:你代码里某个地方把一个**单个整数(int)**当成了可以用下标访问的对象(比如数组、列表)来操作了,所以才会抛出这个提示。结合你之前处理字符串标签的代码,我帮你梳理下可能的问题和解决办法:
最可能的问题:误取了单个值而非数组
你原来处理字符串标签时,用df.iloc[0:120, 4].values取的是多行的标签列,得到的是一个数组。但处理新数据时,可能不小心把切片写成了单一行的索引(比如df.iloc[120, 4].values),这时候得到的就是单个int值,后续用它做数组级别的操作(比如np.where里的比较,或者不小心写了train_t[0]这种下标访问)就会报错。
验证方法
先打印下变量类型和内容确认:
print(type(train_t)) print(train_t)
如果输出是<class 'numpy.int64'>或者<class 'int'>,那就是取成单个值了,得改成切片多行的写法。
正确处理int类型标签的代码示例
假设你的目标是把某个特定整数标签(比如0)转成-1,其他转成1,代码和字符串版本几乎一致,只是把字符串换成对应的整数即可:
# 确保取的是多行标签,得到数组 train_t = df.iloc[0:120, 4].values validation_t = df.iloc[121:, 4].values # 把目标整数标签替换成-1,其他为1 train_t1 = np.where(train_t == 0, -1, 1) # 这里把0换成你要匹配的整数标签 validation_t1 = np.where(validation_t == 0, -1, 1)
额外排查点:标签列的类型是否统一
如果你的标签列里混有字符串和整数(比如 dtype 是object),也可能导致奇怪的错误。可以先把列转成统一的整数类型:
# 强制转换标签列为int类型 df.iloc[:, 4] = df.iloc[:, 4].astype(int)
按照上面的步骤排查,应该就能解决这个问题啦!
内容的提问来源于stack exchange,提问作者Azad
相关产品推荐
相关产品推荐

