Python混合值数组与整数相等判断全返回False问题排查
问题根因
代码存在两处逻辑错误,共同导致所有条目返回FAIL:
- 相等判断类型不匹配:判断条件中用数组元素和字符串
'5'做比较,但数组本身是字符串、整数混合存储,当匹配位置存储的是整数类型的5时,Python中5 == '5'的返回值永远是False,PASS分支永远不会触发。 - DataFrame赋值逻辑错误:循环中
df['PASS_FAIL'] = 'PASS'/df['PASS_FAIL'] = 'FAIL'的写法是对整列所有行统一赋值,不是给当前遍历到的行单独赋值。循环每执行一次,全列值就会被当前分支的结果覆盖一次,只要最后一次循环走到FAIL分支,之前设置过的所有PASS都会被覆盖,最终整列全为FAIL。
单独打印数组元素能得到正确值,是因为坐标转int后做索引的逻辑本身没有问题,异常和索引转换操作无关。
修复方法
- 统一判断两侧的类型:先明确需要匹配的是整数
5还是字符串'5',保证比较运算符两边的值类型一致。 - 修正DataFrame赋值逻辑:赋值时指定当前行的位置,不要直接对整列赋值。
修正后的参考代码如下:
# 先初始化整列为默认值FAIL df['PASS_FAIL'] = 'FAIL' for i in range(len(x_co_list)): x_idx = int(x_co_list[i]) y_idx = int(y_co_list[i]) current_val = array[x_idx][y_idx] # 若需要匹配字符串'5',就把右侧判断值改为'5' if current_val == 5: # 仅对当前索引对应的行赋值 df.loc[i, 'PASS_FAIL'] = 'PASS'
如果x、y坐标列表的遍历顺序和DataFrame行顺序不是一一对应,将df.loc[i, 'PASS_FAIL']中的i替换为实际的行匹配条件即可。
内容的提问来源于stack exchange,提问作者Kebaber
相关产品推荐
相关产品推荐

