Python-在数据框上使用isin会引发错误

时间:2020-01-24 10:39:06

标签: python pandas dataframe

我有一个数据框,其中一列是列表。我正在尝试使用isin,但我不断收到“ TypeError:无法散列的类型:'list'”

  df = pd.DataFrame({'A': [[5,4,3,6], [7,8,9,0]], 'B': [[1,2,3,5], [1,2,6,8]]})

  df[df['A'].isin([3, 6])]

预期输出应为:

      A           B
1  [5,4,3,6]  [1,2,3,5]

我将如何解决此问题,我尝试使用Apply但无法弄清楚?

1 个答案:

答案 0 :(得分:3)

IIUC,您可以使用set代替list ...,使列表中存在所有键,请尝试使用set.issubset

df[df['A'].apply(lambda x: {'3', '6'}.issubset(set(x)))]
# shorthand df[df['A'].apply(lambda x: {'3', '6'} < set(x))]

示例

df = pd.DataFrame({'A': [['5','6','3','4'], ['1','2','1','3']], 'B': [[1,2,3,5],[6,7,8,9]]})

#              A             B
# 0  [5, 6, 3, 4]  [1, 2, 3, 5]
# 1  [1, 2, 1, 3]  [6, 7, 8, 9]

df[df['A'].apply(lambda x: {'3', '6'}.issubset(set(x)))]

[出]

              A             B
0  [5, 6, 3, 4]  [1, 2, 3, 5]

如果您只需要存在至少一个键,请使用set.intersection

df[df['A'].apply(lambda x: bool({'3', '6'}.intersection(set(x))))]
# shorthand df[df['A'].apply(lambda x: bool({'3', '6'} & set(x)))]

[出]

              A             B
0  [5, 6, 3, 4]  [1, 2, 3, 5]
1  [1, 2, 1, 3]  [6, 7, 8, 9]