Pandas系列(八)-筛选工具介绍
内容目录
- 1. 字典式 get 访问
- 2. 属性访问
- 3. 切片操作
- 4. 通过数字筛选行和列
- 5. 通过名称筛选行和列
- 6. 布尔索引
- 7. isin 筛选
- 8. 通过Callable筛选
数据准备
- # 导入相关库
- import numpy as np
- import pandas as pd
- index = pd.Index(data=["Tom", "Bob", "Mary", "James", "Andy", "Alice"], name="name")
- data = {
- "age": [18, 30, np.nan, 40, np.nan, 30],
- "city": ["Bei Jing ", "Shang Hai ", "Guang Zhou", "Shen Zhen", np.nan, " "],
- "sex": [None, "male", "female", "male", np.nan, "unknown"],
- "birth": ["2000-02-10", "1988-10-17", None, "1978-08-08", np.nan, "1988-10-17"]
- }
- user_info = pd.DataFrame(data=data, index=index)
- # 将出生日期转为时间戳
- user_info["birth"] = pd.to_datetime(user_info.birth)
- user_info
- Out[54]:
- age city sex birth
- name
- Tom 18.0 Bei Jing None 2000-02-10
- Bob 30.0 Shang Hai male 1988-10-17
- Mary NaN Guang Zhou female NaT
- James 40.0 Shen Zhen male 1978-08-08
- Andy NaN NaN NaN NaT
- Alice 30.0 unknown 1988-10-17
1. 字典式 get 访问
- #get方法
- user_info.get('age')
- Out[55]:
- name
- Tom 18.0
- Bob 30.0
- Mary NaN
- James 40.0
- Andy NaN
- Alice 30.0
- Name: age, dtype: float64
- user_info.get('age').get('Tom')
- Out[56]: 18.0
2. 属性访问
- user_info.age
- Out[57]:
- name
- Tom 18.0
- Bob 30.0
- Mary NaN
- James 40.0
- Andy NaN
- Alice 30.0
- Name: age, dtype: float64
- user_info.age.Tom
- Out[58]: 18.0
3.切片
切片对于 Series 来说,通过切片可以完成选择指定的行,对于 DataFrame 来说,通过切片可以完成选择指定的行或者列,来看看怎么玩吧
- # 筛选出第二行第一列的数据
- user_info.iloc[1, 0]
- """筛选行"""
- # 获取年龄的前两行
- user_info.age[:2]
- #获取所有信息的前两行
- user_info[:2]
- # 所有信息每两行选择一次数据
- user_info[::2]
- # 对所有信息进行反转
- user_info[::-1]
- """筛选列"""
- user_info['age']
- user_info[["city", "age"]]
4. 通过数字筛选行和列
通过切片操作可以完成筛选行或者列,如何同时筛选出行和列呢?
通过 iloc 即可实现, iloc 支持传入行和列的筛选器,并用 , 隔开。无论是行或者里筛选器,都可以为以下几种情况:
- 一个整数,如 2
- 一个整数列表,如 [2, 1, 4]
- 一个整数切片对象,如 2:4
- 一个布尔数组
- 一个callable
先来看下前3种的用法。
- # 筛选出第一行数据
- user_info.iloc[0]
- # 筛选出第二行第一列的数据
- user_info.iloc[1, 0]
- # 筛选出第二行、第一行、第三行对应的第一列的数据
- user_info.iloc[[1, 0, 2], 0]
- user_info.iloc[0:2,0]
- # 筛选出第一行至第三行以及第一列至第二列的数据
- user_info.iloc[0:3, 0:2]
- # 筛选出第一列至第二列的数据
- user_info.iloc[:, 0:2]
5. 通过名称筛选行和列
虽然通过 iloc 可以实现同时筛选出行和列,但是它接收的是输入,非常不直观, 通过 loc 可实现传入名称来筛选数据,loc 支持传入行和列的筛选器,并用 , 隔开。无论是行或者里筛选器,都可以为以下
几种情况:
- 一个索引的名称,如:"Tom"
- 一个索引的列表,如:["Bob", "Tom"]
- 一个标签范围,如:"Tom": "Mary"
- 一个布尔数组
- 一个callable
先来看下前3种的用法。
- # 筛选出名称为 Tom 的数据一行数据
- user_info.loc["Tom"]
- # 筛选出名称为 Tom 的年龄
- user_info.loc["Tom", "age"]
- # 筛选出名称在 ["Bob", "Tom"] 中的两行数据
- user_info.loc[["Bob", "Tom"]]
- # 筛选出索引名称在 Tom 到 Mary 之间的数据
- user_info.loc["Tom": "Mary"]
- # 筛选出年龄这一列数据
- user_info.loc[:, ["age"]]
- # 筛选出所有 age 到 birth 之间的这几列数据
- user_info.loc[:, "age": "birth"]
- #注:通过名称来筛选时,传入的切片是左右都包含的。
6. 布尔索引
通过布尔操作我们一样可以进行筛选操作,布尔操作时,& 对应 and,| 对应 or,~ 对应 not。当有多个布尔表达式时,需要通过小括号来进行分组。
- user_info[user_info.age > 20]
- # 筛选出年龄在20岁以上,并且性别为男性的数据
- user_info[(user_info.age > 20) & (user_info.sex == "male")]
- # 筛选出性别不为 unknown 的数据
- user_info[~(user_info.sex == "unknown")]
- user_info.loc[user_info.age > 20, ["age"]]
7.isin 筛选
Series 包含了 isin 方法,它能够返回一个布尔向量,用于筛选数据。
- # 筛选出性别属于 male 和 female的数据
- user_info[user_info.sex.isin(["male", "female"])]
- #对于索引来说,一样可以使用 isin 方法来筛选。
- user_info[user_info.index.isin(["Bob"])]
8. 通过Callable筛选
loc、iloc、切片操作都支持接收一个 callable 函数,callable必须是带有一个参数(调用Series,DataFrame)的函数,并且返回用于索引的有效输出。
- user_info[lambda df: df["age"] > 20]
- user_info.loc[lambda df: df.age > 20, lambda df: ["age"]]
- user_info.iloc[lambda df: [0,5], lambda df: [0]]
- user_info.iloc[0:5, lambda df: [0]]
Pandas系列(八)-筛选工具介绍的更多相关文章
- 红豆带你从零学C#系列—Visual Studio工具介绍、下载和安装
一.Visual Studio的下载 Visual Studio(简称VS)是微软的一套完整的开发工具集,集成了能够开发并运行如C#.C++.VB.F#等程序的开发环境,目前最新的版本是Visual ...
- 系列二VS项目软件配置工具介绍
原文:系列二VS项目软件配置工具介绍 Svn和VisualSvn介绍 在使用TortoiseSvn(SVN客户端)+ AnkhSvn(VS2008插件) +VisualSvn Server(版本控制服 ...
- 自定义View系列教程01--常用工具介绍
站在源码的肩膀上全解Scroller工作机制 Android多分辨率适配框架(1)- 核心基础 Android多分辨率适配框架(2)- 原理剖析 Android多分辨率适配框架(3)- 使用指南 自定 ...
- SQL Server 2008空间数据应用系列八:基于Bing Maps(Silverlight)的空间数据存储
原文:SQL Server 2008空间数据应用系列八:基于Bing Maps(Silverlight)的空间数据存储 友情提示,您阅读本篇博文的先决条件如下: 1.本文示例基于Microsoft S ...
- Red Gate系列 - SQL各种工具
Red Gate系列 - SQL各种工具 Red Gate系列文章: Red Gate系列之一 SQL Compare 10.4.8.87 Edition 数据库比较工具 完全破解+使用教程 Red ...
- C#编译器优化那点事 c# 如果一个对象的值为null,那么它调用扩展方法时为甚么不报错 webAPI 控制器(Controller)太多怎么办? .NET MVC项目设置包含Areas中的页面为默认启动页 (五)Net Core使用静态文件 学习ASP.NET Core Razor 编程系列八——并发处理
C#编译器优化那点事 使用C#编写程序,给最终用户的程序,是需要使用release配置的,而release配置和debug配置,有一个关键区别,就是release的编译器优化默认是启用的.优化代码 ...
- Bing Maps进阶系列八:在Bing Maps中集成OpenStreetMap地图
Bing Maps进阶系列八:在Bing Maps中集成OpenStreetMap地图 OSM(OpenStreetMap-开放街道地图)服务就是一种发布自己地图数据图片为服务的一种实现类型,开放街道 ...
- C#进阶系列——WebApi 接口测试工具:WebApiTestClient
前言:这两天在整WebApi的服务,由于调用方是Android客户端,Android开发人员也不懂C#语法,API里面的接口也不能直接给他们看,没办法,只有整个详细一点的文档呗.由于接口个数有点多,每 ...
- 用户管理 之 Linux 用户管理工具介绍
Linux是一个多用户的操作系统,她有完美的用户管理工具,这些工具包括用户的查询.添加.修改,以及用户之间相互切换的工具等:通过这些工具,我们能安全.轻松的完成用户管理: 在这里我们要引入用户控制工具 ...
随机推荐
- c:\windows\system32\config\systemprofile\desktop 打不开
Question 重启开机后显示桌面打不开: 再次重启后无效 Solution 打开注册表regedit如下路径,复制Desktop值到 同路径下的Desktop中,再重启.
- RabbitMQ权限控制原理
我们在使用MQ搭建系统的时候,经常要开放队列给外接系统访问.外接系统的稳定性是不可控的.为了防止外接系统不稳定导致误操作破坏了MQ的配置或数据,需要对MQ做比较精细的权限控制. 我的需求是这样的: 我 ...
- SSH鞋贸商城的设计与实现
目录 应用技术 需求分析 总体设计 项目UI展示 一.应用技术 ①SSH SSH是 struts+spring+hibernate的一个集成框架,是目前比较流行的一种Web应用程序开源框架.区别于 S ...
- Python开发【第五篇】内置函数
abs() 函数返回数字的绝对值 __author__ = "Tang" a = -30 all() 函数用于判断给定的可迭代参数iterable中的所有元素是否都为True,如果 ...
- 为什么要使用TypeScript开发Web应用程序
TypeScript仍然相对较新,但已经赢得了很多信徒.继续阅读,看看这种很酷的语言的一些最好的功能. 定义TypeScript TypeScript是由Microsoft Corporation开发 ...
- JDK内置工具使用(jps、jstack、jmap、jstat)
一.JPS 1.jps -lvm:用于查看当前机器上已装载的jvm 二.jstackjstack命令主要用来查看Java线程的调用堆栈的,可以用来分析线程问题(如死锁) 1.jstack -l pid ...
- JavaScript日历控件开发
概述 在开篇之前,先附上日历的代码地址和演示地址,代码是本文要分析的代码,演示效果是本文要实现的效果 代码地址:https://github.com/aspwebchh/javascript-cont ...
- 创建SVN源库钩子
在源库的hooks目录下面添加post-commit.bat文件,每次代码该文件会自动执行以保证同步到备份服务器 set SVN_HOME="D:\Program Files\VisualS ...
- 兼容IphoneX
兼容IphoneX的显示,一般有两种方法,一种通过css的media来做兼容,一种是通过js来做兼容. 一.我们先讲CSS的方法,我们要做两步即可: 1. 全屏覆盖,html使用 <meta n ...
- Mybatis映射文件的自动映射与手动映射问题
Mapper XML 文件 MyBatis 的真正强大在于它的映射语句,也是它的魔力所在.由于它的异常强大,映射器的 XML 文件就显得相对简单.如果拿它跟具有相同功能的 JDBC 代码进行对比,你会 ...