在pandas DataFrame中使用比较列表的问题

时间:2014-09-01 13:54:43

标签: python pandas

我在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

这里发生了什么?如何进行列表比较?

2 个答案:

答案 0 :(得分:3)

这是一个奇怪的问题,它可能与列表不可清除的事实有关 我会去申请:

df['d'].apply(lambda x: x == [4,5])

当然,正如DSM所建议的那样,以下工作:

df = pd.DataFrame([[1,2,3,(4,5)],[6,7,8,(9,10)]], columns=['a','b','c','d'])
df['d'] == (4,5)

另一个解决方案是使用list comprehension

df[[x == [4, 5] for v in df['col2']]]

答案 1 :(得分:0)

作为替代方案,如果您希望保留"系列列表"结构,您可以将系列转换为元组,仅用于比较目的。这可以通过pd.Series.apply

实现
>>>>df['d'].apply(tuple) == (4, 5)

0     True
1    False
Name: d, dtype: bool

但请注意,一系列列表中没有可用的选项是矢量化的。建议您在执行比较之前将数据拆分为数字系列。