Python 如果变量不等于向量的任何元素,请选中
我有一个媒介犬种,显示了所有四种正在调查的独特犬种Python 如果变量不等于向量的任何元素,请选中,python,python-3.x,numpy,Python,Python 3.x,Numpy,我有一个媒介犬种,显示了所有四种正在调查的独特犬种 #a set of possible dog species dogSpecies = [1,2,3,4] 我还有一个包含整数的数据向量,对应于所有测试狗的狗种记录 # species of examined dogs data = np.array(1,1,2,-1,0,2,3,5,4) 数据中的某些记录包含不同于1、2、3或4的值。例如-1、0或5。如果数据集中的一个元素不等于dogSpecies的任何元素,则这种情况应在错误评估布尔矩
#a set of possible dog species
dogSpecies = [1,2,3,4]
我还有一个包含整数的数据向量,对应于所有测试狗的狗种记录
# species of examined dogs
data = np.array(1,1,2,-1,0,2,3,5,4)
数据中的某些记录包含不同于1、2、3或4的值。例如-1、0或5。如果数据集中的一个元素不等于dogSpecies的任何元素,则这种情况应在错误评估布尔矩阵中标记为False
理想情况下,我的errorEval向量如下所示:
errorEval = np.array[True, True, True, False, False, True, True, False, True]
我想要一段代码,检查数据元素是否与向量元素不相等。出于某种原因,我的代码将errorEval向量的每个元素都标记为“False”
for i in range(np.size(data, axis = 0)):
# validation of the species
if (data[i] != dogSpecies):
errorEval[i] = False
我知道我无法将一个元素与上述四个元素的向量进行比较,但我该如何做呢?这不正是你想要的吗
for index, elem in enumerate(data):
if elem not in dogSpecies:
errorEval[index] = False
可能不是很快,它不使用任何矢量化的numpy ufunc,但是如果数组不是很大,那也没关系。将狗种转换成一组也会加快速度
另外,您的python看起来非常像c/java。我建议阅读。如果我理解正确,您有一个数据框和一个狗种列表。这应该达到你想要的
df = pd.DataFrame({'dog': [1,3,4,5,1,1,8,9,0]})
dog
0 1
1 3
2 4
3 5
4 1
5 1
6 8
7 9
8 0
df['errorEval'] = df['dog'].isin(dogSpecies).astype(int)
dog errorEval
0 1 1
1 3 1
2 4 1
3 5 0
4 1 1
5 1 1
6 8 0
7 9 0
8 0 0
df.errorEval.values
# array([1, 1, 1, 0, 1, 1, 0, 0, 0])
如果不想创建新列,则可以执行以下操作:
df.assign(errorEval=df['dog'].isin(dogSpecies).astype(int)).errorEval.values
# array([1, 1, 1, 0, 1, 1, 0, 0, 0])
正如@FHTMitchel所述,您必须使用in来检查元素是否在列表中。 但您可以使用列表理解,它比普通循环更快,也更短:
errorEval = np.array([True if elem in dogSpecies else False for elem in data])
因此,您需要一个列,指示您的dogSpecies列表中是否存在dog列值,我的理解是否正确?现在,您正在检查我假设int的数据元素是否不等于列表,它的计算结果将始终为false。提供数据/输入和预期结果的最小示例总是有帮助的。另请阅读,您可以使用数据帧列的属性df.iloc[:,3]从数据帧列中获取numpy数组。值如果OP澄清,更好更有效的方法是,仅使用pandas函数,并将其转换为数组作为最后一步,这样它就可以矢量化。这就是我想要实现的,是的。我只想把它放在一个单独的向量中,而不是数据帧中。无论如何谢谢你!您不需要在数据框中设置它,请参阅我的更新答案
errorEval = np.array([True if elem in dogSpecies else False for elem in data])