pandas筛选符合多个条件的方法 | 您所在的位置:网站首页 › pandas筛选列值重复的行 › pandas筛选符合多个条件的方法 |
文章目录
示例数据展示例子筛选说明
直接筛选基于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 实验室设备网 版权所有 |