首页 > 解决方案 > 基于数据框中列表对象内容的 Pandas 数据框选择

问题描述

我有一个熊猫数据框,其中一列包含列表对象,这给了我dtype: object.列表对象的长度不同。

        features           other_features
0        ["foo", "bar"]                2
1        ["foo", "dog"]                1
2        ["dog"]                       4

我想在我的数据框中选择列表中包含不同列表中的元素的行external_list = ["dog", "cat"]

在这种情况下,我希望结果是包含 dog 或 cat 以及其他 coulmns 的行,这将是:

        features           other_features
1        ["foo", "dog"]                1
2        ["dog"]                       4

我已经尝试过 isin,但据我了解,它要求要查看的元素的列类型不是多个对象的列表。

filter = df["features"].isin(["dog", "cat"])

它导致每个元素都为 False,它不应该因为一些应该为 True,并且它不会返回其余的列。

我该如何解决这个问题?

标签: pythonpandasdataframeselection

解决方案


map与转换为由 测试的集合的比较列表一起使用isdisjoint~用于反向掩码:

#if string repr of list
#import ast
#df['features'] = df['features'].apply(ast.literal_eval)

external_list = ["dog", "cat"]
df = df[~df.features.map(set(external_list).isdisjoint)]
print (df)
     features  other_features
1  [foo, dog]               1
2       [dog]               4

推荐阅读