我有一個非常簡單的for回圈,但卻沒有得到預期的結果。它逐行運行一個ndarray列,并且應該將例如 "重型車輛 "或 "汽車 "的陳述句分類為數值(我知道它們也是字串)。
for k in range(0, data. shape[0])。)
if data[k, 1] == ' Car' or ' Motorcycle' 或 ' 自行車' 或 ' 行人'。
data[k, 1] = '1'>elif data[k, 1] == ' Heavy Vehicle' or ' Medium Vehicle' or ' Bus':
else:
data[k, 1] = '3'
然而結果是,Python將所有的值都設定為'1',即使是那些帶有'重型車輛'陳述句的單元格。我不知道為什么Python不把這些值替換成定義的數字值。
預先感謝你的幫助!
uj5u.com熱心網友回復:
試試這個:
data = np.array([None]*3]*3)
data[:,1] = [' Car', ' Heavy Vehicle', ' CCC']
print(data)
for k in range(0, data.shape[0] )。)
if any(x == data[k, 1] for x in [' Car'/span>, ' 摩托車' , ' 自行車' , ' 行人'])。)
data[k, 1] = '1'/span>
elif any(x == data[k, 1] for x in [' Heavy Vehicle', ' Medium Vehicle',' Bus'])。
data[k, 1] = ' 2'
else:
data[k, 1] = '3'
print(data)
輸出:
[[None ' Car' None]
[None ' Heavy Vehicle' None]
[None 'CCC' None] ]
[[None '1' None]
[None '2 None]
[None '3 None] ]
uj5u.com熱心網友回復:
字串在Python中也是布爾物件!
你基本上是在做False Or True,所以每個回圈都是True。
試一下:
print(Bool("") # 空字串是假的。
print(Bool("String") # Full String is True[/span]。
你應該再次檢查字串,比如:
for k in range(0, data. shape[0])。)
if data[k, 1] == ' Car' or data[k, 1] == ' Motorcycle' or data[k, 1] == ' 自行車' or data[k, 1] == ' 行人':
elif data[k, 1] == ' Heavy Vehicle' or data[k, 1] == ' Medium Vehicle' or data[k, 1] == ' Bus':
else:
data[k, 1] = '3'
但我個人會這樣寫:
moving_objects = [['Car, '摩托車','自行車','行人'] 。
['重型車輛','中型車輛','巴士']]
for k in range(0, data.shape[0] 。
data[k, 1] = [i if k in moving_objects[i] [0] else 3 fori, m in enumerate(moving_objects) ] [0]
uj5u.com熱心網友回復:
該程式實際上按預期作業:下面的陳述句...或'Motorcycle將總是回傳True,因為你正在做的是問if 'Motorcycle':,如果你做bool('Motorcycle),將回傳True。
因此,我建議你重構你的代碼,如下所示:
for k in range(0, data. shape[0])。)
_ = data[k, 1] 。
if _ in [' Car'/span>, ' 摩托車', ' 自行車', ' 行人'] 。
data[k, 1] = '1'
elif _ in [' Heavy Vehicle', ' Medium Vehicle', ' Bus']。
data[k, 1] = ' 2'
else:
data[k, 1] = '3'
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/309456.html
標籤:
