内容目录

  • 1. 字典式 get 访问
  • 2. 属性访问
  • 3. 切片操作
  • 4. 通过数字筛选行和列
  • 5. 通过名称筛选行和列
  • 6. 布尔索引
  • 7. isin 筛选
  • 8. 通过Callable筛选

数据准备

  1. # 导入相关库
  2. import numpy as np
  3. import pandas as pd
  4.  
  5. index = pd.Index(data=["Tom", "Bob", "Mary", "James", "Andy", "Alice"], name="name")
  6. data = {
  7. "age": [18, 30, np.nan, 40, np.nan, 30],
  8. "city": ["Bei Jing ", "Shang Hai ", "Guang Zhou", "Shen Zhen", np.nan, " "],
  9. "sex": [None, "male", "female", "male", np.nan, "unknown"],
  10. "birth": ["2000-02-10", "1988-10-17", None, "1978-08-08", np.nan, "1988-10-17"]
  11. }
  12. user_info = pd.DataFrame(data=data, index=index)
  13. # 将出生日期转为时间戳
  14. user_info["birth"] = pd.to_datetime(user_info.birth)
  15. user_info
  16. Out[54]:
  17. age city sex birth
  18. name
  19. Tom 18.0 Bei Jing None 2000-02-10
  20. Bob 30.0 Shang Hai male 1988-10-17
  21. Mary NaN Guang Zhou female NaT
  22. James 40.0 Shen Zhen male 1978-08-08
  23. Andy NaN NaN NaN NaT
  24. Alice 30.0 unknown 1988-10-17

1. 字典式 get 访问

  1. #get方法
  2. user_info.get('age')
  3. Out[55]:
  4. name
  5. Tom 18.0
  6. Bob 30.0
  7. Mary NaN
  8. James 40.0
  9. Andy NaN
  10. Alice 30.0
  11. Name: age, dtype: float64
  12. user_info.get('age').get('Tom')
  13. Out[56]: 18.0

2. 属性访问

  1. user_info.age
  2. Out[57]:
  3. name
  4. Tom 18.0
  5. Bob 30.0
  6. Mary NaN
  7. James 40.0
  8. Andy NaN
  9. Alice 30.0
  10. Name: age, dtype: float64
  11. user_info.age.Tom
  12. Out[58]: 18.0

 3.切片

  切片对于 Series 来说,通过切片可以完成选择指定的行,对于 DataFrame 来说,通过切片可以完成选择指定的行或者列,来看看怎么玩吧

  1. # 筛选出第二行第一列的数据
  2. user_info.iloc[1, 0]
  3. """筛选行"""
  4. # 获取年龄的前两行
  5. user_info.age[:2]
  6. #获取所有信息的前两行
  7. user_info[:2]
  8. # 所有信息每两行选择一次数据
  9. user_info[::2]
  10. # 对所有信息进行反转
  11. user_info[::-1]
  12. """筛选列"""
  13. user_info['age']
  14. user_info[["city", "age"]]

 4. 通过数字筛选行和列

  通过切片操作可以完成筛选行或者列,如何同时筛选出行和列呢?
  通过 iloc 即可实现, iloc 支持传入行和列的筛选器,并用 , 隔开。无论是行或者里筛选器,都可以为以下几种情况:

  • 一个整数,如 2
  • 一个整数列表,如 [2, 1, 4]
  • 一个整数切片对象,如 2:4
  • 一个布尔数组
  • 一个callable

先来看下前3种的用法。

  1. # 筛选出第一行数据
  2. user_info.iloc[0]
  3. # 筛选出第二行第一列的数据
  4. user_info.iloc[1, 0]
  5. # 筛选出第二行、第一行、第三行对应的第一列的数据
  6. user_info.iloc[[1, 0, 2], 0]
  7. user_info.iloc[0:2,0]
  8. # 筛选出第一行至第三行以及第一列至第二列的数据
  9. user_info.iloc[0:3, 0:2]
  10. # 筛选出第一列至第二列的数据
  11. user_info.iloc[:, 0:2]

  5. 通过名称筛选行和列

  虽然通过 iloc 可以实现同时筛选出行和列,但是它接收的是输入,非常不直观, 通过 loc 可实现传入名称来筛选数据,loc 支持传入行和列的筛选器,并用 , 隔开。无论是行或者里筛选器,都可以为以下

  几种情况:

  • 一个索引的名称,如:"Tom"
  • 一个索引的列表,如:["Bob", "Tom"]
  • 一个标签范围,如:"Tom": "Mary"
  • 一个布尔数组
  • 一个callable

先来看下前3种的用法。

  1. # 筛选出名称为 Tom 的数据一行数据
  2. user_info.loc["Tom"]
  3. # 筛选出名称为 Tom 的年龄
  4. user_info.loc["Tom", "age"]
  5. # 筛选出名称在 ["Bob", "Tom"] 中的两行数据
  6. user_info.loc[["Bob", "Tom"]]
  7. # 筛选出索引名称在 Tom 到 Mary 之间的数据
  8. user_info.loc["Tom": "Mary"]
  9. # 筛选出年龄这一列数据
  10. user_info.loc[:, ["age"]]
  11. # 筛选出所有 age 到 birth 之间的这几列数据
  12. user_info.loc[:, "age": "birth"]
  13. #注:通过名称来筛选时,传入的切片是左右都包含的。

  6. 布尔索引

  通过布尔操作我们一样可以进行筛选操作,布尔操作时,& 对应 and,| 对应 or,~ 对应 not。当有多个布尔表达式时,需要通过小括号来进行分组。

  1. user_info[user_info.age > 20]
  2. # 筛选出年龄在20岁以上,并且性别为男性的数据
  3. user_info[(user_info.age > 20) & (user_info.sex == "male")]
  4. # 筛选出性别不为 unknown 的数据
  5. user_info[~(user_info.sex == "unknown")]
  6. user_info.loc[user_info.age > 20, ["age"]]

  7.isin 筛选

  Series 包含了 isin 方法,它能够返回一个布尔向量,用于筛选数据。

  1. # 筛选出性别属于 male 和 female的数据
  2. user_info[user_info.sex.isin(["male", "female"])]
  3. #对于索引来说,一样可以使用 isin 方法来筛选。
  4. user_info[user_info.index.isin(["Bob"])]

  8. 通过Callable筛选

  loc、iloc、切片操作都支持接收一个 callable 函数,callable必须是带有一个参数(调用Series,DataFrame)的函数,并且返回用于索引的有效输出。

  1. user_info[lambda df: df["age"] > 20]
  2. user_info.loc[lambda df: df.age > 20, lambda df: ["age"]]
  3. user_info.iloc[lambda df: [0,5], lambda df: [0]]
  4. user_info.iloc[0:5, lambda df: [0]]

  

  

Pandas系列(八)-筛选工具介绍的更多相关文章

  1. 红豆带你从零学C#系列—Visual Studio工具介绍、下载和安装

    一.Visual Studio的下载 Visual Studio(简称VS)是微软的一套完整的开发工具集,集成了能够开发并运行如C#.C++.VB.F#等程序的开发环境,目前最新的版本是Visual ...

  2. 系列二VS项目软件配置工具介绍

    原文:系列二VS项目软件配置工具介绍 Svn和VisualSvn介绍 在使用TortoiseSvn(SVN客户端)+ AnkhSvn(VS2008插件) +VisualSvn Server(版本控制服 ...

  3. 自定义View系列教程01--常用工具介绍

    站在源码的肩膀上全解Scroller工作机制 Android多分辨率适配框架(1)- 核心基础 Android多分辨率适配框架(2)- 原理剖析 Android多分辨率适配框架(3)- 使用指南 自定 ...

  4. SQL Server 2008空间数据应用系列八:基于Bing Maps(Silverlight)的空间数据存储

    原文:SQL Server 2008空间数据应用系列八:基于Bing Maps(Silverlight)的空间数据存储 友情提示,您阅读本篇博文的先决条件如下: 1.本文示例基于Microsoft S ...

  5. Red Gate系列 - SQL各种工具

    Red Gate系列 - SQL各种工具 Red Gate系列文章: Red Gate系列之一 SQL Compare 10.4.8.87 Edition 数据库比较工具 完全破解+使用教程 Red ...

  6. C#编译器优化那点事 c# 如果一个对象的值为null,那么它调用扩展方法时为甚么不报错 webAPI 控制器(Controller)太多怎么办? .NET MVC项目设置包含Areas中的页面为默认启动页 (五)Net Core使用静态文件 学习ASP.NET Core Razor 编程系列八——并发处理

    C#编译器优化那点事   使用C#编写程序,给最终用户的程序,是需要使用release配置的,而release配置和debug配置,有一个关键区别,就是release的编译器优化默认是启用的.优化代码 ...

  7. Bing Maps进阶系列八:在Bing Maps中集成OpenStreetMap地图

    Bing Maps进阶系列八:在Bing Maps中集成OpenStreetMap地图 OSM(OpenStreetMap-开放街道地图)服务就是一种发布自己地图数据图片为服务的一种实现类型,开放街道 ...

  8. C#进阶系列——WebApi 接口测试工具:WebApiTestClient

    前言:这两天在整WebApi的服务,由于调用方是Android客户端,Android开发人员也不懂C#语法,API里面的接口也不能直接给他们看,没办法,只有整个详细一点的文档呗.由于接口个数有点多,每 ...

  9. 用户管理 之 Linux 用户管理工具介绍

    Linux是一个多用户的操作系统,她有完美的用户管理工具,这些工具包括用户的查询.添加.修改,以及用户之间相互切换的工具等:通过这些工具,我们能安全.轻松的完成用户管理: 在这里我们要引入用户控制工具 ...

随机推荐

  1. c:\windows\system32\config\systemprofile\desktop 打不开

    Question 重启开机后显示桌面打不开: 再次重启后无效 Solution 打开注册表regedit如下路径,复制Desktop值到 同路径下的Desktop中,再重启.

  2. RabbitMQ权限控制原理

    我们在使用MQ搭建系统的时候,经常要开放队列给外接系统访问.外接系统的稳定性是不可控的.为了防止外接系统不稳定导致误操作破坏了MQ的配置或数据,需要对MQ做比较精细的权限控制. 我的需求是这样的: 我 ...

  3. SSH鞋贸商城的设计与实现

    目录 应用技术 需求分析 总体设计 项目UI展示 一.应用技术 ①SSH SSH是 struts+spring+hibernate的一个集成框架,是目前比较流行的一种Web应用程序开源框架.区别于 S ...

  4. Python开发【第五篇】内置函数

    abs() 函数返回数字的绝对值 __author__ = "Tang" a = -30 all() 函数用于判断给定的可迭代参数iterable中的所有元素是否都为True,如果 ...

  5. 为什么要使用TypeScript开发Web应用程序

    TypeScript仍然相对较新,但已经赢得了很多信徒.继续阅读,看看这种很酷的语言的一些最好的功能. 定义TypeScript TypeScript是由Microsoft Corporation开发 ...

  6. JDK内置工具使用(jps、jstack、jmap、jstat)

    一.JPS 1.jps -lvm:用于查看当前机器上已装载的jvm 二.jstackjstack命令主要用来查看Java线程的调用堆栈的,可以用来分析线程问题(如死锁) 1.jstack -l pid ...

  7. JavaScript日历控件开发

    概述 在开篇之前,先附上日历的代码地址和演示地址,代码是本文要分析的代码,演示效果是本文要实现的效果 代码地址:https://github.com/aspwebchh/javascript-cont ...

  8. 创建SVN源库钩子

    在源库的hooks目录下面添加post-commit.bat文件,每次代码该文件会自动执行以保证同步到备份服务器 set SVN_HOME="D:\Program Files\VisualS ...

  9. 兼容IphoneX

    兼容IphoneX的显示,一般有两种方法,一种通过css的media来做兼容,一种是通过js来做兼容. 一.我们先讲CSS的方法,我们要做两步即可: 1. 全屏覆盖,html使用 <meta n ...

  10. Mybatis映射文件的自动映射与手动映射问题

    Mapper XML 文件 MyBatis 的真正强大在于它的映射语句,也是它的魔力所在.由于它的异常强大,映射器的 XML 文件就显得相对简单.如果拿它跟具有相同功能的 JDBC 代码进行对比,你会 ...