if data['weight'] < 50 | data['blood_diseases'] == 1 | data['age'] > 65 | data['hemoglobin_level'] < 12 | data['period_between_successive_blood_donations'] < 3:
data['can'] = 0
else:
data['can'] = 1
我有一個錯誤
Series 的真值是模棱兩可的。使用 a.empty、a.bool()、a.item()、a.any() 或 a.all()。
我該怎么做?
uj5u.com熱心網友回復:
請在 if-else 陳述句中添加括號。它會解決你的問題。像這樣:
if (data['weight'] < 50)|(data['blood_diseases'] == 1)|(data['age'] > 65)| (data['hemoglobin_level'] < 12) | (data['period_between_successive_blood_donations'] < 3):
data['can'] = 0
else:
data['can'] = 1
要么
if (data['weight'] < 50) or (data['blood_diseases'] == 1) or (data['age'] > 65) or (data['hemoglobin_level'] < 12) or (data['period_between_successive_blood_donations'] < 3):
data['can'] = 0
else:
data['can'] = 1
uj5u.com熱心網友回復:
不要使用
if/else。運算式if awhereais a Series 沒有意義,因為有幾種可能的方法可以將 Series 解釋為單個布林值。這是導致您看到的錯誤的原因之一。您還需要使用括號強制執行所需的評估順序:
不僅會
data['weight'] < 50 | data['blood_diseases']評估為data['weight'] < (50 | data['blood_diseases']),因為|它的優先級高于<,但也
data['weight'] < 50 | data['blood_diseases'] == 1將評估為(data['weight'] < (50 | data['blood_diseases'])) and ((50 | data['blood_diseases']) == 1)由于比較運算子的鏈接。這將再次嘗試將兩個系列解釋為運算式中的單個布林值,
a and b這是出現錯誤的第二個原因。
不要使用
data['can'] = 0或data['can'] = 1。它將為該列分配一個常量值,而不是逐行評估其他列。
只需將運算式分配給新列。
data['can'] = (data['weight'] < 50) | (data['blood_diseases'] == 1) | (data['age'] > 65) | (data['hemoglobin_level'] < 12) | (data['period_between_successive_blood_donations'] < 3)
如果你真的需要0/1而不是布林值,你可以轉換它們:
如何在 Pandas DataFrame 中將 True/False 映射到 1/0?
uj5u.com熱心網友回復:
采用np.where
import numpy as np
mask = (data['weight'] < 50) | (data['blood_diseases'] == 1) | \
(data['age'] > 65) | (data['hemoglobin_level'] < 12) | \
(data['period_between_successive_blood_donations'] < 3)
data["can"] = np.where(mask,1,0)
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/434040.html
上一篇:如何將.assign用于列中的值
