2016-09-27 115 views
2

我在过滤数据类型为列表的列上的pandas数据框时遇到了一些问题(我们称之为column_1)。具体而言,我只想返回行,以便column_1和另一个预定列表的交集不为空。但是,当我尝试将逻辑放在.where,function的参数中时,我总是会得到错误。以下是我的尝试,并返回错误。如何在列数据类型为列表时过滤pandas数据框

  • Attemping测试单个元素是否是列表中:

    table[element in table['column_1']] 返回错误...... KeyError: False

  • 试图将名单与所有的名单在数据帧的行中:

    table[[349569] == table.column_1]返回错误Arrays were different lengths: 23041 vs 1

我试图让这两个中间步骤下来,然后我测试两个列表的交集。

感谢您花时间阅读我的问题!

回答

0

考虑pd.Seriess

s = pd.Series([[1, 2, 3], list('abcd'), [9, 8, 3], ['a', 4]]) 
print(s) 

0  [1, 2, 3] 
1 [a, b, c, d] 
2  [9, 8, 3] 
3   [a, 4] 
dtype: object 

而且测试列表test

test = ['b', 3, 4] 

套用lambda功能的s每个元素转换为一组,并intersectiontest

print(s.apply(lambda x: list(set(x).intersection(test)))) 

0 [3] 
1 [b] 
2 [3] 
3 [4] 
dtype: object 

要用它作为面具,请使用bool而不是list

s.apply(lambda x: bool(set(x).intersection(test))) 

0 True 
1 True 
2 True 
3 True 
dtype: bool