python - 基于数据框中列表对象内容的 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,并且它不会返回其余的列。
我该如何解决这个问题?
解决方案
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
推荐阅读
- ios - 试图在同一个 UIView 元素上调用 UIView 的两个扩展
- sql - Postgresql - 如何根据唯一行的总数创建条件
- java - 如何通过 FirefoxProfile 启动 Mozilla 浏览会话?
- php - 如何配置本地 MySQL 连接(Sequel Pro & Laravel)?
- javascript - 为什么javascript中的单击事件仅在第二次单击时删除列表项
- python - 以矢量化方式查询距离矩阵
- java - Android:如何在标签主机中添加图像
- java - 如何在没有 Android ICU 的情况下在 ChoiceFormat 中使用“{0,ordinal}”
- html - 导航中(页面顶部)链接上方的行
- python - 张量流中的错误