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

Python for循环处理ndarray分类时所有值均被设为1,不符合预期

问题原因

你的条件判断存在语法逻辑错误:Python 中or运算符连接的是两个独立的布尔表达式,单独的非空字符串会被判定为布尔值True。你写的if data[k, 1] == ' Car' or ' Motorcycle' or ' Bicycle' or ' Pedestrian' 实际执行逻辑等价于:

if (data[k, 1] == ' Car') or (bool(' Motorcycle')) or (bool(' Bicycle')) or (bool(' Pedestrian'))

后三个非空字符串的布尔值永远为True,因此整个if判断结果永远为真,所有行都会被赋值为'1',不会进入后续的elif和else分支。

注意你原始类别字符串前面都带有空格,匹配时不要遗漏空格,否则会出现匹配失败进入else分支的情况

修正方案

1. 基础修正写法

直接使用in成员运算符判断值是否在目标集合内,逻辑清晰易读:

for k in range(0, data.shape[0]):
    if data[k, 1] in (' Car', ' Motorcycle', ' Bicycle', ' Pedestrian'):
        data[k, 1] = '1'
    elif data[k, 1] in (' Heavy Vehicle', ' Medium Vehicle', ' Bus'):
        data[k, 1] = '2'
    else:
        data[k, 1] = '3'

2. 高性能ndarray专属写法

你操作的是numpy的ndarray结构,不需要写Python级别的循环,使用向量化操作性能更高,尤其适合数据量较大的场景:

import numpy as np
# 定义类别到数值的映射规则
mapping = {
    ' Car': '1', ' Motorcycle': '1', ' Bicycle': '1', ' Pedestrian': '1',
    ' Heavy Vehicle': '2', ' Medium Vehicle': '2', ' Bus': '2'
}
# 批量映射,不在映射表中的值默认返回'3'
data[:, 1] = np.vectorize(lambda x: mapping.get(x, '3'))(data[:, 1])

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 18:48:03