具有多个元素的数组的真值是不明确的。使用 a.any() 或 a.all() 来处理相等问题
The truth value of an array with more than one element is ambiguous. Use a.any() or a.all() for equals issue
所以我知道网上有很多关于这个错误的答案,但我找不到一个与 numpy 相关的答案找到一个值等于数组中的某个值,或者我只是愚蠢地理解它们是什么说。所以这是我的代码:
import pandas as pd
import numpy as np
arr_1 = np.array([7, 1, 6, 9, 2, 4])
arr_2 = np.array([5, 8, 9, 10, 2, 3])
arr_3 = np.array([1, 9, 3, 4, 5, 1])
dict_of_arrs = {
'arr' : [arr_1, arr_2, arr_3]
}
df = pd.DataFrame(dict_of_arrs)
filt = df.arr.apply(lambda x: np.diff(x)>0)
if filt==True:
pass
如标题所示,我收到错误消息:
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
谢谢
编辑:说而不是通过我想做类似的事情:
import pandas as pd
import numpy as np
arr_1 = np.array([7, 1, 6, 9, 2, 4])
arr_2 = np.array([5, 8, 9, 10, 2, 3])
arr_3 = np.array([1, 9, 3, 4, 5, 1])
dict_of_arrs = {
'arr' : [arr_1, arr_2, arr_3]
}
df = pd.DataFrame(dict_of_arrs)
true_list = []
false_list = []
filt = df.arr.apply(lambda x: np.diff(x)>0)
for i in filt:
if filt==True:
true_list.append(i)
else:
false_list.append(i)
filt
只不过是 True
和 False
的数组
import pandas as pd
import numpy as np
arr_1 = np.array([7, 1, 6, 9, 2, 4])
arr_2 = np.array([5, 8, 9, 10, 2, 3])
arr_3 = np.array([1, 9, 3, 4, 5, 1])
dict_of_arrs = {
'arr' : [arr_1, arr_2, arr_3]
}
df = pd.DataFrame(dict_of_arrs)
filt = df.arr.apply(lambda x: np.diff(x)>0)
print("filt: ",list(filt))
# your filt is a 2d array
filtFlattened = []
# making it 1d
for i in list(filt): filtFlattened+=list(i)
print("filtFlattened: ",filtFlattened)
if any(filtFlattened): print("atleast one is True")
if all(filtFlattened): print("all are True")
filt: [array([False, True, True, False, True]), array([ True, True, True, False, True]), array([ True, False, True, True, False])]
filtFlattened: [False, True, True, False, True, True, True, True, False, True, True, False, True, True, False]
atleast one is True
让我们试试 np.where
df['filter'] = df.arr.apply(lambda x: np.where(np.diff(x) > 0)[0].tolist())
输出,
arr filter
0 [7, 1, 6, 9, 2, 4] [1, 2, 4]
1 [5, 8, 9, 10, 2, 3] [0, 1, 2, 4]
2 [1, 9, 3, 4, 5, 1] [0, 2, 3]
您的第二个代码示例可以工作,但有错字。不要比较元素,而是尝试比较整个数组。
for i in filt:
if filt==True:
true_list.append(i)
else:
false_list.append(i)
应该是:
for i in filt:
if i == True:
true_list.append(i)
else:
false_list.append(i)
所以我知道网上有很多关于这个错误的答案,但我找不到一个与 numpy 相关的答案找到一个值等于数组中的某个值,或者我只是愚蠢地理解它们是什么说。所以这是我的代码:
import pandas as pd
import numpy as np
arr_1 = np.array([7, 1, 6, 9, 2, 4])
arr_2 = np.array([5, 8, 9, 10, 2, 3])
arr_3 = np.array([1, 9, 3, 4, 5, 1])
dict_of_arrs = {
'arr' : [arr_1, arr_2, arr_3]
}
df = pd.DataFrame(dict_of_arrs)
filt = df.arr.apply(lambda x: np.diff(x)>0)
if filt==True:
pass
如标题所示,我收到错误消息:
ValueError: The truth value of an array with more than one element is ambiguous. Use a.any() or a.all()
谢谢
编辑:说而不是通过我想做类似的事情:
import pandas as pd
import numpy as np
arr_1 = np.array([7, 1, 6, 9, 2, 4])
arr_2 = np.array([5, 8, 9, 10, 2, 3])
arr_3 = np.array([1, 9, 3, 4, 5, 1])
dict_of_arrs = {
'arr' : [arr_1, arr_2, arr_3]
}
df = pd.DataFrame(dict_of_arrs)
true_list = []
false_list = []
filt = df.arr.apply(lambda x: np.diff(x)>0)
for i in filt:
if filt==True:
true_list.append(i)
else:
false_list.append(i)
filt
只不过是 True
和 False
import pandas as pd
import numpy as np
arr_1 = np.array([7, 1, 6, 9, 2, 4])
arr_2 = np.array([5, 8, 9, 10, 2, 3])
arr_3 = np.array([1, 9, 3, 4, 5, 1])
dict_of_arrs = {
'arr' : [arr_1, arr_2, arr_3]
}
df = pd.DataFrame(dict_of_arrs)
filt = df.arr.apply(lambda x: np.diff(x)>0)
print("filt: ",list(filt))
# your filt is a 2d array
filtFlattened = []
# making it 1d
for i in list(filt): filtFlattened+=list(i)
print("filtFlattened: ",filtFlattened)
if any(filtFlattened): print("atleast one is True")
if all(filtFlattened): print("all are True")
filt: [array([False, True, True, False, True]), array([ True, True, True, False, True]), array([ True, False, True, True, False])]
filtFlattened: [False, True, True, False, True, True, True, True, False, True, True, False, True, True, False]
atleast one is True
让我们试试 np.where
df['filter'] = df.arr.apply(lambda x: np.where(np.diff(x) > 0)[0].tolist())
输出,
arr filter
0 [7, 1, 6, 9, 2, 4] [1, 2, 4]
1 [5, 8, 9, 10, 2, 3] [0, 1, 2, 4]
2 [1, 9, 3, 4, 5, 1] [0, 2, 3]
您的第二个代码示例可以工作,但有错字。不要比较元素,而是尝试比较整个数组。
for i in filt:
if filt==True:
true_list.append(i)
else:
false_list.append(i)
应该是:
for i in filt:
if i == True:
true_list.append(i)
else:
false_list.append(i)