pandas筛选符合多个条件的方法 您所在的位置:网站首页 pandas筛选列值重复的行 pandas筛选符合多个条件的方法

pandas筛选符合多个条件的方法

2024-04-04 06:21| 来源: 网络整理| 查看: 265

文章目录 示例数据展示例子筛选说明 直接筛选基于map的筛选使用query()方法筛选总结:参考资料 我的这篇笔记不记录排序、分组、替换,只记录筛选功能的三种常见的方法。

直接筛选(推荐)基于map方法的筛选(在方法一的基础上,十分推荐)query方法(不推荐)

所有代码均在:https://github.com/123liudong/pythonBlog/tree/master/dataDealPandas

示例数据展示 all_data = pd.read_csv('data.csv') print(all_data.info()) print(all_data.head(100))

在这里插入图片描述

例子筛选说明

为了简单例子,所以在使用筛选方法1和方法2的时候,直接筛选User_id=1439408和Date=NaN的数据。至于筛选方法3,因为我还不知道怎么表示NaN所以仅展示筛选User_id=1439408的数据。

直接筛选 直接使用列需要满足的条件,如果需要多个列同时满足条件,使用’&‘符号连接即可;如果只需要某一列满足条件,则使用’|'连接多个列的条件。 # # 直接筛选方法 some = all_data[(all_data['User_id'] == 1439408) & (all_data['Date'].isna())] print(some)

结果:得到了User_id=1439408和Date为空的数据项

User_id Merchant_id Coupon_id Discount_rate Distance Date_received Date 1 1439408 4663 11002.0 150:20 1.0 20160528.0 NaN 2 1439408 2632 8591.0 20:1 0.0 20160217.0 NaN 3 1439408 2632 1078.0 20:1 0.0 20160319.0 NaN 4 1439408 2632 8591.0 20:1 0.0 20160613.0 NaN 基于map的筛选 这个筛选方式和直接筛选唯一不同的就是,把筛选条件给隔离出来了。 user_requried = all_data['User_id'].map(lambda x : x==1439408) date_requried = all_data['Date'].map(lambda x : np.isnan(x)) some = all_data[user_requried & date_requried] print(some)

结果:其中map返回的值必须是bool类型,即某一个条件。然后使用直接筛选的方式,把条件合并,最终得出筛选的结果。我认为使用此种类型的方法更加的优美。

User_id Merchant_id Coupon_id Discount_rate Distance Date_received Date 1 1439408 4663 11002.0 150:20 1.0 20160528.0 NaN 2 1439408 2632 8591.0 20:1 0.0 20160217.0 NaN 3 1439408 2632 1078.0 20:1 0.0 20160319.0 NaN 4 1439408 2632 8591.0 20:1 0.0 20160613.0 NaN 使用query()方法筛选 直接写表达式,得出想要筛选的结果。 some = all_data.query('(User_id == 1439408)') print(some)

结果:直接写表达式容易触发一些不必要的问题(值的类型容易出错,一些特殊值的表达困难等),所以并不建议使用这样的方法。

User_id Merchant_id Coupon_id ... Distance Date_received Date 0 1439408 2632 NaN ... 0.0 NaN 20160217.0 1 1439408 4663 11002.0 ... 1.0 20160528.0 NaN 2 1439408 2632 8591.0 ... 0.0 20160217.0 NaN 3 1439408 2632 1078.0 ... 0.0 20160319.0 NaN 4 1439408 2632 8591.0 ... 0.0 20160613.0 NaN 5 1439408 2632 NaN ... 0.0 NaN 20160516.0 6 1439408 2632 8591.0 ... 0.0 20160516.0 20160613.0 总结: 直接筛选适用于一些较简单的筛选基于map的方法适用于较为复杂的筛选,把条件提出来实现,使得代码更加简单明了。使用query方法虽然也能实现,但写的表达式总是容易出错,所以不建议使用。 参考资料 https://pandas.pydata.org/pandas-docs/stable/


【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有