pandas的筛选功能,跟excel的筛选功能类似,但是功能更强大。
Select rows from a DataFrame based on values in a column -pandas 筛选
https://stackoverflow.com/questions/17071871/select-rows-from-a-dataframe-based-on-values-in-a-column-in-pandas
pandas的筛选功能,跟excel的筛选功能类似,但是功能更强大。
在SQL数据中, 我们可以用这样的语句:
select * from table where colume_name = some_value.
1
1
bool 索引
在Pandas的DataFrame格式中可以采用 bool 值作为索引,选取数据行。比如:
import pandas as pd
# Create data set
d = {'foo':[100, 111, 222],
'bar':[333, 444, 555]}
df = pd.DataFrame(d)
# Full dataframe:
df
# Shows:
# bar foo
# 0 333 100
# 1 444 111
# 2 555 222
# bool 值索引
df[[True, False, True]] # 或 df.loc[[True, False, True]]
# 都可以得到
# bar foo
#0 333 100
#1 444 111
所以,如果想通过数值来对行进行筛选,我们可以通过构造bool值来选择DataFrame的行
df[df['column_name'] == some_value] 如果是数值型,也可以采用 >/<
df[df['column_name'].isin(some_values)] some_values 可以是单个变量,也可以是list 或者迭代器
组合多种条件
df[(df['column_name'] == some_value) & df['other_column'].isin(some_values)]
df[(df['column_name'] == some_value) | df['other_column'].isin(some_values)]
#注意,& | 的优先级很高,所以每个条件都需要一个括号
不等于,可以使用
df[~df['column_name'].isin(some_values)]
df[df['column_name'] != some_value]
np.where
与上面所述的方法有所不同, np.where 返回的是行的位置,所以在获取行时不能采用df, 要采用df.loc 或者 df.iloc
np.where(df.A.values=='foo')
# (array([0, 2, 4, 6, 7]),)
df.iloc[np.where(df.A.values=='foo')]
query
DataFrame 提供了query函数,方便我们可以采用表达式来进行数据的筛选。
参考:
http://pandas.pydata.org/pandas-docs/version/0.17.0/indexing.html#indexing-query
n = 10
df = pd.DataFrame(np.random.randint(n, size=(n, 2)), columns=list('bc'))
# b c
# 0 9 0
# 1 1 2
# 2 2 4
# 3 7 6
# 4 6 4
# 5 4 7
# 6 2 9
# 7 4 8
# 8 6 2
# 9 9 0
df.query('index > b > c')
# b c
# 8 6 2
#可以采用的表达式很多,比如
df.query('(a < b) & (b < c)')
df.query('a < b and b < c')
时间测评
import pandas as pd
df = pd.DataFrame({'A': 'foo bar foo bar foo bar foo foo'.split(),
'B': 'one one two three two two one www.lieqibiji.com three'.split()})
df.iloc[np.where(df.A.values=='foo')]
%timeit df.iloc[np.where(df.A.values=='foo')]
#1000 loops, best of 3: www.caihonyule.com/ 274 µs per loop
%timeit df.loc[np.where(df.A.values=='foo')]
#1000 loops, best of 3: 342 µs per loop
%timeit df.loc[df['A'] == 'foo']
#1000 loops, best of 3: 347 µs per loop
%timeit df[df['A'] == 'foo']
#1000 loops, best of 3: 354 www.feifanshifan8.cn µs per loop
%timeit df.loc[df['A'].isin(['foo'])]
#1000 loops, best of 3: 265 µs per loop
%timeit df[df.A=='foo']
#1000 loops, best of 3: 357 www.xingchexiu.com µs per loop
%timeit df.query('(A=="www.qinlinyule.cn foo")')
#1000 loops, best of 3: 943 µs per loop
可以发现采用 df.iloc[np.where(df.A.values=='foo')]和 df.loc[df['A'].isin(['foo'])] 速度比较快, 而采用query的方法比较慢。
df.loc[df['A'] == 'foo'] 速度快于 df[df['A'] == 'foo']
pandas的筛选功能,跟excel的筛选功能类似,但是功能更强大。的更多相关文章
- DataGridView如何实现列标头带数据筛选功能,就象Excel高级筛选功能一样
'近日有本论坛网友问:DataGridView如何实现列标头带数据筛选功能,就象Excel高级筛选功能一样 '今晚正好闲着没事,加之以前也没用到过这个需求,所以就写了个模拟功能,供各位坛友酌情参考. ...
- NPOI之Excel——自动筛选、数字格式
设置Excel的自动筛选功能 最新导出数据需要使用Excel的筛选功能,网上多方查找,终于在一个繁体的网站上找到了方法,呃,这个网站还是Java的,讲的是POI,不过.NET的NPOI也就一样用了. ...
- excel表格 筛选 通过mysql语句
1.整理excel表格的数据 类似的 前面有其他符号的 都可以处理. 注意下一步是2个操纵:分别设置左右: 结果: 2.在复制粘贴到excel的时候,会有一些数字被设置成了科学计数法, 例如复制到ex ...
- cxGrid控件过滤筛选后如何获更新筛选后的数据集
cxGrid控件过滤筛选后如何获更新筛选后的数据集 (2015-06-19 12:12:08) 转载▼ 标签: delphi cxgrid筛选数据集 cxgrid过滤 分类: Delphi cxGri ...
- 润乾报表新功能–导出excel支持锁定表头
在以往的报表设计中,锁定表头是会经常被用到的一个功能,这个功能不仅能使浏览的页面更加直观,信息对应的更加准确,而且也提高了报表的美观程度.但是,很多客户在将这样的报表导出excel时发现exce ...
- 个人永久性免费-Excel催化剂功能第79波-自动及手动备份功能,比Onedrive还好用
在OFFICE365里,有个自动保存功能,可惜保存的地址是在Onedrive里,在中国国情下,备份十分卡顿,近乎难以忍受的慢.虽然现在收费性的网盘部分是可以有文件版本的备份功能,但也是繁琐且最要命的是 ...
- 个人永久性免费-Excel催化剂功能第31波-数量金额分组凑数功能,财务表哥表姐最爱
在财务工作过程中,很大时候需要使用到凑数的需求,花了两三天时间认真研究了一下,本人水平也只能做代码搬运工,在用户体验上作了一下完善.完成了Excel版的凑数功能. 文章出处说明 原文在简书上发表,再同 ...
- 微软Power BI 每月功能更新系列——11月Power BI 新功能学习
Power BI Desktop11月产品功能摘要 本月Power BI Desktop 有一个大规模的更新.现在,通常可以使用复合模型在一个模型中将直接查询和导入源组合在一起.UserVoice上的 ...
- 2019微软Power BI 每月功能更新系列——3月Power BI 新功能学习
Power BI3月产品功能更新发布啦!本次新功能新增了热图和单选切片器:完善了新的DAX功能和对现有功能的改进(例如按钮和选择窗格):同时官方表示建模视图的全面改进也正在进行中~Woo~那么,本月更 ...
随机推荐
- 【小程序】模拟数据支持(mockjs配置模拟服务器接口数据)
utils目录 ①下载mockjs(地址)放置utils目录中 ②新建api.js :配置模拟数据以及后台接口,通过DEBUG=ture; //切换数据接口 配置如下: let API_HOST = ...
- Luogu4040 AHOI/JSOI2014 宅男计划 贪心、二分、三分
传送门 仍然对"为什么这个函数单峰"的问题毫无理解 首先,对于保质期又低.价格又贵的食物,我们显然不需要购买它.所以如果设\(pri_i\)表示保质期不小于\(i\)的所有食品中价 ...
- WPF中的DoubleAnimation
原文:WPF中的DoubleAnimation WPF中的DoubleAnimation ...
- 2019 The 19th Zhejiang University Programming Contest
感想: 今天三个人的状态比昨天计院校赛的状态要好很多,然而三个人都慢热体质导致签到题wa了很多发.最后虽然跟大家题数一样(6题),然而输在罚时. 只能说,水题还是刷得少,看到签到都没灵感实在不应该. ...
- Linux系统特殊变量
系统给定的特殊变量: 变量名 作用 $0 当前脚本的名字 $n 传递给脚本或者函数的参数,n表示第几个参数 $# 传递给脚本或函数的参数个数 $* 传递给脚本或函数的所有参数 $@ 传递给脚本或者函数 ...
- item 5: 比起显式的类型声明,更偏爱auto
本文翻译自modern effective C++,由于水平有限,故无法保证翻译完全正确,欢迎指出错误.谢谢! 博客已经迁移到这里啦 啊,简单愉快的代码: int x; 等等,讨厌!我忘了初始化x,所 ...
- Spring AOP不起作用原因
一.直接在切面类定义切点: AOP切面类里面的方法全部不支持触发切面,否则一个切面函数把自己当做切点就会导致递归层层调用. AOP切面类发出函数调用一律不触发切面,避免两个切面类相互调用迭代请求的情况 ...
- Python进阶量化交易场外篇5——标记A股市场涨跌周期
新年伊始,很荣幸笔者的<教你用 Python 进阶量化交易>专栏在慕课专栏板块上线了,欢迎大家订阅!为了能够提供给大家更轻松的学习过程,笔者在专栏内容之外会陆续推出一些手记来辅助同学们学习 ...
- 牛客第二场-J-farm-二维树状数组
二维树状数组真的还挺神奇的,更新也很神奇,比如我要更新一个区域内的和,我们的更新操作是这样的 add(x1,y1,z); add(x2+1,y2+1,z); add(x1,y2+1,-z); add( ...
- CentOS 网卡自动启动、配置等ifcfg-eth0教程
装完centos后发现网卡没有自动启动, vi /etc/sysconfig/network-scripts/ifcfg-eth0 将ONBOOT=no 改为yes即可 原文链接: http://yp ...