3 回答
TA贡献1810条经验 获得超4个赞
问题是lists 不可散列,因此有必要比较tuples:
print (df.Li.map(tuple) == (1,2))
0 True
1 False
2 False
Name: Li, dtype: bool
或者在列表理解中:
mask = [tuple(x) == (1,2) for x in df.Li]
#alternative
mask = [x == [1,2] for x in df.Li]
print (mask)
[True, False, False]
如果所有列表的长度相同:
mask = (np.array(df.Li.tolist()) == [1,2]).all(axis=1)
print (mask)
[ True False False]
TA贡献1829条经验 获得超9个赞
问题是 pandas 正在考虑[1, 2]作为一个类似系列的对象,并试图将 的每个元素df.Li与 的每个元素进行比较[1, 2],因此出现错误:
ValueError:长度必须匹配才能进行比较
您无法将大小为 2 的列表与大小为 3 ( df.Li) 的列表进行比较。为了验证这一点,您可以执行以下操作:
print(df.Li == [1, 2, 3])
输出
0 False
1 False
2 False
Name: Li, dtype: bool
它不会抛出任何错误并且可以正常工作,但False会按预期返回。为了使用列表进行比较,您可以执行以下操作:
# this creates an array where each element is [1, 2]
data = np.empty(3, dtype=np.object)
data[:] = [[1, 2] for _ in range(3)]
print(df.Li == data)
输出
0 True
1 False
2 False
Name: Li, dtype: bool
总而言之,这似乎是熊猫方面的一个错误。
TA贡献1784条经验 获得超2个赞
我的列 'vectors' 包含 numpy ndarrays,当我想与另一个 ndarray 'centroid' 进行比较时,我得到了同样的错误。以下适用于 numpy ndarrays:
df['vectors'].apply(lambda x: ((vec==centroid).sum() == centroid.shape[0]))
这也适用于列表:
df.Li.apply(lambda x: x==[1,2])
添加回答
举报