python - 根据数据框中列表对象的内容选择 Pandas 数据框

标签 python pandas dataframe selection

我有一个 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/

相关文章:

python - Tkinter - 将文本插入 Canvas 窗口

python - scipy.optimize.curve_fit : Default value of max_nfev broken?

Python 3 - 多个字典键的交集

python - seaborn 热图的人工刻度标签

r - 将数据帧转换为 LIST

r - 计算数据在 R 中另一个数据帧中的次数

Python Dataframe 按平均值和 STD 分组

python - 理解python嵌套一行for循环

python - 下降栏是周末。选择仅工作日索引的列

python - 将 DataFrame 序列化到 HDF5 存储时出现日期时间列错误