pandas - 检查多个列的多个值并返回一个数据框
问题描述
我有一个字符串列表,我的数据框有几个我需要搜索的列(每个类型的对象)。
我需要返回其中任何选定列中包含任何字符串项的所有行,或者是字符串的一部分。
如何检查我的数据框中的 4 列是否包含字符串列表中的任何一项?列内的字符串可能包含列表对象中提供的部分字符串,但可能不会全部包含在内。
我已经尝试将 'list' 作为元组和 python 列表:
list = ("25110", "25910", "25990", "30110", "33110", "43999")
new_df = df.loc[(df['column1'].isin(list))
| (df['column2'].isin(list))
| (df['column3'].isin(list))
| (df['column4'].isin(list))]
当我运行时new_df.shape
,我得到 (0, 12)。
我是 pandas 的新手,需要为一个激烈的 uni 项目进行大量分析,但无法让它发挥作用。我需要先将每列转换为字符串数据类型吗?(我实际上也已经尝试过,但每种数据类型仍然顽固地是一个“对象”)。
解决方案
国际大学联盟:
尝试:
lst = ["25110", "25910", "25990", "30110", "33110", "43999"]
cols=['column1','column2','column3','column4']
最后:
m=df[cols].astype(str).agg(lambda x:x.str.contains('|'.join(lst)),1).any(1)
#you can also use apply() in place of agg()
df[m]
#OR
df.loc[m]
推荐阅读
- cron - 为特定用户创建 crontab
- html - 我们如何在 HTML/Angular 中为下拉菜单调用两个不同的函数?
- vuejs2 - 使用 google firebase、cordova、vuejs 登录时出错
- asp.net - 我的 SQL Server 密码每 10 分钟过期一次
- vba - 当新电子邮件包含某些文本时提示
- wpf - 根据当前选择的 TabItem 动态更改 TabItem 内 ListView 的 ItemsSource 属性
- python - 输入 0 与 flatten_2 层不兼容:预期 min_ndim=3,发现 ndim=2
- sql - Db2 中的嵌套联接
- azure - 您是否必须使用 Azure 数据工厂,还是只能使用 Databricks 作为来自多个来源的 ETL 工具?
- angular - Angular 2 - 带有自定义键字段的对象映射?