熊猫,伊辛,列表列

时间:2018-11-13 16:43:34

标签: pandas

如果一个或另一个值在列表中,则尝试使布尔值标志读取为TRUE。下面的代码返回第1行的FALSE,我不确定为什么,有人可以帮我理解为什么第一行返回FALSE吗?

lists={'someList!':[[1,2,12,6,'ABC'],[1000,4,'z','a','bob']]}
dfLists = pd.DataFrame(lists)
dfLists['contains?']=dfLists['someList!'].isin([0,1])

3 个答案:

答案 0 :(得分:0)

  

有人可以帮助我理解为什么第一行返回FALSE吗?

这不起作用,因为.isin(values)返回了系列中的每个元素是否包含在values中。

您可以将{0, 1}用作集合,并将其交集的真实性应用于每个列表:

>>> s = {0, 1}
>>> dfLists['someList!'].apply(lambda x: bool(s.intersection(x)))
0     True
1    False

这有效地做到了:

>>> s.intersection([1, 2, 12, 6, 'ABC'])
{1}
>>> s.intersection([1000, 4, 'z', 'a', 'bob'])
set()

第一个结果的boolTrue,因为它是非空的。

答案 1 :(得分:0)

使用Dataframe构造函数将list列展平,然后使用isin

pd.DataFrame(dfLists['someList!'].tolist()).isin([1,2]).any(1)
Out[39]: 
0     True
1    False
dtype: bool

答案 2 :(得分:0)

您正在向数据框传递一个列表列表。它将整数与列表进行比较,因此找不到匹配项。

像这样明确定义您的列,isin应该起作用。

lists={'someList!':[1,2,12,6,'ABC'], 'someList2':[1000,4,'z','a','bob']}