我有一个 pandas 数据框,其中一列包含列表对象,它为我提供了 dtype: object。
列表对象的长度不同。
features other_features
0 ["foo", "bar"] 2
1 ["foo", "dog"] 1
2 ["dog"] 4
我想选择数据框中的行,其中列表包含位于不同列表中的元素external_list = ["dog", "cat"]
。
在这种情况下,我希望结果是包含狗或猫以及其他可能的行,这将是:
features other_features
1 ["foo", "dog"] 1
2 ["dog"] 4
我尝试过 isin,但据我了解,它要求要查看的元素的列类型不能是包含多个对象的列表。
filter = df["features"].isin(["dog", "cat"])
它会导致每个元素都为 False,但事实不应该如此,因为有些元素应该为 True,并且它不会返回其余的列。
我该如何解决这个问题?
最佳答案
使用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
关于python - 根据数据框中列表对象的内容选择 Pandas 数据框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61209008/