【跟着stackoverflow学Pandas】Select rows from a DataFrame based on values in a column -pandas 筛选
最近做一个系列博客,跟着stackoverflow学Pandas。
以 pandas作为关键词,在stackoverflow中进行搜索,随后安照 votes 数目进行排序:
https://stackoverflow.com/questions/tagged/pandas?sort=votes&pageSize=15
Select rows from a DataFrame based on values in a column -pandas 筛选
pandas的筛选功能,跟excel的筛选功能类似,但是功能更强大。
在SQL数据中, 我们可以用这样的语句:
select * from table where colume_name = some_value.
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')
df.query('color == "red"')
时间测评
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 three'.split()})
df.iloc[np.where(df.A.values=='foo')]
%timeit df.iloc[np.where(df.A.values=='foo')]
#1000 loops, best of 3: 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 µ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 µs per loop
%timeit df.query('(A=="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']
【跟着stackoverflow学Pandas】Select rows from a DataFrame based on values in a column -pandas 筛选的更多相关文章
- 【跟着stackoverflow学Pandas】How to iterate over rows in a DataFrame in Pandas-DataFrame按行迭代
最近做一个系列博客,跟着stackoverflow学Pandas. 以 pandas作为关键词,在stackoverflow中进行搜索,随后安照 votes 数目进行排序: https://stack ...
- 【跟着stackoverflow学Pandas】 - Adding new column to existing DataFrame in Python pandas - Pandas 添加列
最近做一个系列博客,跟着stackoverflow学Pandas. 以 pandas作为关键词,在stackoverflow中进行搜索,随后安照 votes 数目进行排序: https://stack ...
- 【跟着stackoverflow学Pandas】 -Get list from pandas DataFrame column headers - Pandas 获取列名
最近做一个系列博客,跟着stackoverflow学Pandas. 以 pandas作为关键词,在stackoverflow中进行搜索,随后安照 votes 数目进行排序: https://stack ...
- 【跟着stackoverflow学Pandas】add one row in a pandas.DataFrame -DataFrame添加行
最近做一个系列博客,跟着stackoverflow学Pandas. 以 pandas作为关键词,在stackoverflow中进行搜索,随后安照 votes 数目进行排序: https://stack ...
- 【跟着stackoverflow学Pandas】“Large data” work flows using pandas-pandas大数据处理流程
最近做一个系列博客,跟着stackoverflow学Pandas. 以 pandas作为关键词,在stackoverflow中进行搜索,随后安照 votes 数目进行排序: https://stack ...
- 【跟着stackoverflow学Pandas】Delete column from pandas DataFrame-删除列
最近做一个系列博客,跟着stackoverflow学Pandas. 以 pandas作为关键词,在stackoverflow中进行搜索,随后安照 votes 数目进行排序: https://stack ...
- 【跟着stackoverflow学Pandas】Renaming columns in pandas-列的重命名
最近做一个系列博客,跟着stackoverflow学Pandas. 以 pandas作为关键词,在stackoverflow中进行搜索,随后安照 votes 数目进行排序: https://stack ...
- 跟着百度学PHP[14]-PDO之Mysql的事务处理2
前面所将仅仅是在纯mysql下的讲解,这节就是要将其搬到PDO台面上来了. 将自动提交关闭. SetAttribute下有一个PDO::ATTR_AUTOCOMMIT 将其设置为0即可关闭,如:$pd ...
- 【跟着大佬学JavaScript】之节流
前言 js的典型的场景 监听页面的scroll事件 拖拽事件 监听鼠标的 mousemove 事件 ... 这些事件会频繁触发会影响性能,如果使用节流,降低频次,保留了用户体验,又提升了执行速度,节省 ...
随机推荐
- RocEDU.阅读.写作《霍乱时期的爱情》书摘(二)
她不会流一滴眼泪,不会浪费自己的余生,在慢火煮炖的回忆的蛆肉汤中煎熬,不会把自己活活埋葬在四面墙壁之间,成日为自己缝制寿衣,尽管这是当地人乐见寡妇做的事情. 活到这把年纪,人还在的时候就已经腐烂一半了 ...
- Response attachment filename 中文乱码
Response.setHeader("Content-Disposition", "attachment; filename=" + fileName+&qu ...
- bat(续七)-for语句(循环结构)
for语句(循环结构) for语句可以实现类似于C语言里面的循环结构,当然for语句的功能要更强大一点,通过不同的开关可以实现更多的功能.for语句有多个开关,不同开关将会实现不同的功能. 1.无 ...
- mybaties mapping中if..else
<select id="selectSelective" resultMap="xxx" parameterType="xxx"> ...
- ElasticSearch集群故障案例分析: 警惕通配符查询
最近ElasticSearch集群出现了 https://elasticsearch.cn/article/171 文章中描述的情况,现在转载全文警示下自己. 许多有RDBMS/SQL背景的开发者,在 ...
- 解题报告:hdu 1005 number subsequent
2017-09-06 20:35:59 writer:pprp 本来以为这是一道水题,写了一个递归就赶紧交上去了, 结果超时了,看看数据范围100000000,肯定把栈给爆了 想用记忆化的方法,但是虽 ...
- RK61 Keyboard Use
~ 打法: FN+shift+Esc / ? Alt Files Ctral <=> 上 下 左 右 打法:FN+shift 切换 解锁键盘 打法:FN+win 蓝牙连接 打法:FN+ ...
- enabled和priority属性
本篇来继续学习@Test下的注释,这篇学习两个属性的基本使用.第一个是设置该条用例不被执行,第二个的作用是设置用例执行的优先顺序. 1. 属性enabled 在Testng中,如果方法前面添加了@Te ...
- 在阿里云服务器上搭建 Apache Tomat 应用
在阿里云上购买一台服务器,系统采用 window 2008 Server 企业版,64位 1.下载Java7 JRE,安装 http://www.java.com/zh_CN/download/man ...
- C#第一个windows窗体应用程序
Form1.cs using System; …… namespace self_1_1{ public partial class Form1 : Form { public Form1() { I ...