我有一个pandas的DataFrame,其中一列的数据类型是int列表,如下所示:
df = pandas.DataFrame([[1,2,3,[4,5]],[6,7,8,[9,10]]], columns=['a','b','c','d'])
>>> df
a b c d
0 1 2 3 [4, 5]
1 6 7 8 [9, 10]
我希望使用d构建一个过滤器,但是普通的比较操作似乎不起作用:
>>> df['d'] == [4,5]
0 False
1 False
Name: d, dtype: bool
然而,当我逐行检查时,我得到了我所期望的结果。
>>> df.loc[0,'d'] == [4,5]
True
这里发生了什么?我该如何进行列表比较?
d['d']
返回一个list
的Series
,然后该操作将每个元素与右侧进行比较。我期望返回的序列是[True,False]
,因为第一行在列d
上有相同的列表,而第二行没有。但实际上我得到了[false, false]
,这对我来说没有意义。 - Mike[4,5]
进行比较,而是将第一个元素与4进行比较(它不是)并将第二个元素与5进行比较(它不是)。因此:[False,False]
。如果您想要类似的行为,我猜您可以使用元组:df["d"] == (4,5)
会按您想要的方式工作。pandas
实际上不支持非标量条目。 - DSMdf.d == [[4,5],[4,5]]
,那么 DSM 是正确的,它会按照您的预期执行,但语法不太灵活。 - EdChum