3 回答

TA貢獻(xiàn)1810條經(jīng)驗(yàn) 獲得超4個(gè)贊
問(wèn)題是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]
如果所有列表的長(zhǎng)度相同:
mask = (np.array(df.Li.tolist()) == [1,2]).all(axis=1)
print (mask)
[ True False False]

TA貢獻(xiàn)1829條經(jīng)驗(yàn) 獲得超9個(gè)贊
問(wèn)題是 pandas 正在考慮[1, 2]作為一個(gè)類似系列的對(duì)象,并試圖將 的每個(gè)元素df.Li與 的每個(gè)元素進(jìn)行比較[1, 2],因此出現(xiàn)錯(cuò)誤:
ValueError:長(zhǎng)度必須匹配才能進(jìn)行比較
您無(wú)法將大小為 2 的列表與大小為 3 ( df.Li) 的列表進(jìn)行比較。為了驗(yàn)證這一點(diǎn),您可以執(zhí)行以下操作:
print(df.Li == [1, 2, 3])
輸出
0 False
1 False
2 False
Name: Li, dtype: bool
它不會(huì)拋出任何錯(cuò)誤并且可以正常工作,但False會(huì)按預(yù)期返回。為了使用列表進(jìn)行比較,您可以執(zhí)行以下操作:
# 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
總而言之,這似乎是熊貓方面的一個(gè)錯(cuò)誤。

TA貢獻(xiàn)1784條經(jīng)驗(yàn) 獲得超2個(gè)贊
我的列 'vectors' 包含 numpy ndarrays,當(dāng)我想與另一個(gè) ndarray 'centroid' 進(jìn)行比較時(shí),我得到了同樣的錯(cuò)誤。以下適用于 numpy ndarrays:
df['vectors'].apply(lambda x: ((vec==centroid).sum() == centroid.shape[0]))
這也適用于列表:
df.Li.apply(lambda x: x==[1,2])
添加回答
舉報(bào)