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‘]

时间: 2024-10-12 13:17:29

pandas的筛选功能,跟excel的筛选功能类似,但是功能更强大。的相关文章

DataGridView如何实现列标头带数据筛选功能,就象Excel高级筛选功能一样

'近日有本论坛网友问:DataGridView如何实现列标头带数据筛选功能,就象Excel高级筛选功能一样 '今晚正好闲着没事,加之以前也没用到过这个需求,所以就写了个模拟功能,供各位坛友酌情参考. 'VB.NET 2008 环境 '新建一个项目后,只需在Form1中拉一个DataGridView,一个ComboBox,然后将下面代码复制粘贴即可,其它什么也不用做 Public Class Form1 Dim SelectedCol As Integer = 0, IsFindit As Boo

Excel高级筛选操作图解

每次在给学生讲Excel高级筛选时,总是有一种无力感,最少一半人要给讲两遍才能明白什么是高级筛选.高级怎么做.索性在此将高级筛选写成博文一篇,权当再做一次总结.这里以Excel2010的操作为例. Excel的筛选可分为普通筛选与高级筛选.筛选很好理解,就是根据条件将一个表中的数据过滤一遍,留下符合条件的行.例如,有下面一张表: 现在要筛选出部门是"事业部"而且"基本工资"大于等于5000的行出来.操作如下: (1)先选择要筛选的范围(Excel的很多操作在执行前都

excel 如何 筛选,以及筛选后,在复制时 显示 不可对多重选定区域使用此命令的解决办法

excel 如何 筛选,以及筛选后,在复制时 显示 不可对多重选定区域使用此命令的解决办法选中 第一行, 开始 筛选 选择 某一列 右下角的小三角 ,进行内容筛选 即可. excel 筛选后,在复制时 显示 不可对多重选定区域使用此命令解决办法筛选结束后,选择几列进行复制会提示"不可对多重选定区域使用此命令".那么就别单独选择几列了,而是全选.点击整个表格的左上角,这样筛选 后的结果就会都被选中.右击 "复制",然后 粘贴 到 sheet2工作表中.这样就把筛选的结

Vue.js 实践(2):实现多条件筛选、搜索、排序及分页的表格功能

与上周的第一篇实践教程一样,在这篇文章中,我将继续从一种常见的功能--表格入手,展示Vue.js中的一些优雅特性.同时也将对filter功能与computed属性进行对比,说明各自的适用场景,也为vue2.0版本中即将删除的部分filter功能做准备. 需求分析 还是先从需求入手,想想实现这样一个功能需要注意什么.大致流程如何.有哪些应用场景. 表格本身是一种非常常用的组件,用于展示一些复杂的数据时表现很好. 当数据比较多时,我们需要提供一些筛选条件,让用户更快列出他们关注的数据. 除了预设的一

jQuery Validate【为表单提供了强大的验证功能,让客户端表单验证变得更简单】

jQuery Validate jQuery Validate 插件为表单提供了强大的验证功能,让客户端表单验证变得更简单,同时提供了大量的定制选项,满足应用程序各种需求.该插件捆绑了一套有用的验证方法,包括 URL 和电子邮件验证,同时提供了一个用来编写用户自定义方法的 API.所有的捆绑方法默认使用英语作为错误信息,且已翻译成其他 37 种语言. 该插件是由 J?rn Zaefferer 编写和维护的,他是 jQuery 团队的一名成员,是 jQuery UI 团队的主要开发人员,是 QUn

功能更强大的格式化工具类 FormatUtils.java

package com.util; import java.text.DecimalFormat; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; /** * 功能更强大的格式化工具类 */ public class FormatUtils { private static SimpleDateFormat second = new SimpleDateForma

功能更新 | medini analyze — 符合ISO 26262的功能安全平台工具

汽车电子电气系统的功能安全随着智能驾驶.新能源等新兴技术的发展而愈发受到重视.在国际功能安全标准ISO 26262的落地过程中遇到了很多的棘手问题:如何正确而有效地实施HARA以得到合适的安全目标?如何进行安全分析才能确保安全需求完整而充分?如何验证系统/软件/硬件设计方案的安全性?硬件指标的评估计算要如何开展?开发过程的追溯性.一致性.完整性如何保证? 功能介绍 medini analyze工具是专业的功能安全开发平台工具,符合ISO 26262开发全流程,功能覆盖ISO 26262要求的所有

Android解决WebView的定位功能、视频全屏播放、下载功能、页面Url的处理、进度条处理

解决WebView的定位功能.视频全屏播放.下载功能.页面Url的处理.进度条处理 事先说明: 定位功能在安卓6.0需要用户手动确认权限后才能使用 若需在安卓6.0适配WebView的定位功能,则需要在WebView中手动增加用户权限访问 详细可百度安卓6.0权限管理系统,或者采用第三方封装好的权限管理类进行编写(如Bmob) 如果对内容不理解的话,可参考最后的整个类的代码 如果对BaseActivity这个抽象类不理解的话,可以查看下面一篇文章对BaseActivity的介绍 步骤一:webv

Google面试题—有四个线程1、2、3、4。线程1的功能就是输出1,线程2的功能就是输出2,以此类推.........现在有四个文件ABCD

分类: windows编程 C++ 2012-10-27 19:56 3410人阅读 评论(1) 收藏 举报 有四个线程1.2.3.4.线程1的功能就是输出1,线程2的功能就是输出2,以此类推.........现在有四个文件ABCD.初始都为空.现要让四 个文件呈如下格式:A:1 2 3 4 1 2....B:2 3 4 1 2 3....C:3 4 1 2 3 4....D:4 1 2 3 4 1....请设计程序. [cpp] view plaincopy #include <stdio.h