pandas筛选符合多个条件的方法
·
我的这篇笔记不记录排序、分组、替换,只记录筛选功能的三种常见的方法。
- 直接筛选(推荐)
- 基于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/
更多推荐
已为社区贡献1条内容
所有评论(0)