使用Pandas对数据进行筛选和排序

2023-05-16

使用Pandas对数据进行筛选和排序

转自: http://bluewhale.cc/2016-08-06/use-pandas-filter-and-sort.html

筛选和排序是Excel中使用频率最多的功能,通过这个功能可以很方便的对数据表中的数据使用指定的条件进行筛选和计算,以获得需要的结果。在Pandas中通过.sort和.loc函数也可以实现这两 个功能。.sort函数可以实现对数据表的排序操作,.loc函数可以实现对数据表的筛选操作。本篇文章将介绍如果通过Pandas的这两个函数完成Excel中的筛选和排序操作。

Excel筛选和排序

首选导入需要使用的Pandas库和numpy库,读取并创建数据表,将数据表命名为lc。

import pandas as pd
import numpy as np
lc=pd.DataFrame(pd.read_csv('LoanStats3a.csv',header=1))

创建数据表后,开始使用Pandas的.sort函数对数据表进行排序操作,下面是Pandas官方对.sort函数语法和使用方法的说明。.sort函数主要包含6个参数,columns为要进行排序的列名称, ascending为排序的方式true为升序,False为降序,默认为true。axis为排序的轴,0表示index,1表示columns,当对数据列进行排序时,axis必须设置为0。inplace默认为False,表示对数据 表进行排序,不创建新实例。Kind可选择排序的方式,如快速排序等。na_position对NaN值的处理方式,可以选择first和last两种方式,默认为last,也就是将NaN值放在排序的结尾。

sort官方说明

在了解了.sort函数的语法和使用方法后,我们开始使用这个函数对数据进行排序操作,数据源来自Lending Club 2017-2011年的公开数据。首先对单列数据进行排序。

对单列数据进行排序

升序
单列数据的排序的方法很简单,按照.sort函数中的介绍,写清楚要排序的数据表名称,以及要进行排序的列名称即可。具体的代码和排序结果如下所示,其中lc是前面我们读取并创建的数据表名称,loan_amnt是要进行排序的列名称。这里我们对lc数据表按loan_amnt列进行升序排列。这里需要说明的是ascending参数的默认值是True,也就是升序。因此下面的两种写法效果是一样的 。

lc.sort(["loan_amnt"])
lc.sort(["loan_amnt"],ascending=True)

对数据排序_升序

降序
将ascending参数的值改为False就完成对数据表的降序排列工作。与升序排列的数据表相比可以发现升序排列将loan_amnt列的最小值放在了前面,因此我们可以判断loan_amnt的最小金额为500,与之相反,降序排列将最大值放在了前面,因此loan_amnt的最大金额应该为35000。这里我们没有设置na_position参数的值,因此按默认情况loan_amnt列的NaN值在排序的结尾显示。以下显示了降序排列的代码和结果。

lc.sort(["loan_amnt"],ascending=False)

对数据排序_降序

对多列数据进行排序

除了对单列数据进行排序以外,.sort函数还可以对多列数据进行排序操作。下面我们分别对loan_amnt和int_rate字段进行降序排列,以下是具体的代码和排序结果,与单列数据排序的代码相比,这里只增加了一个新的列名称int_rate。

lc.sort(["loan_amnt","int_rate"],ascending=False)

对多列数据进行排序1

我们将需要排序的两个列名称互换位置,再次执行降序排列操作。观察两次的排序结果可以发现,这次的结果与之前的结果有一些差异。Loan_amnt字段的排序结果有些混乱,有些较小的值排在了较大值的前面。这是因为第一次排序时loan_amnt是第一排序字段,int_rate是第二排序字段。两个字段交换位置第二次排序后,int_rate变成了第一排序字段,loan_amnt变成了第二排序字段 。

lc.sort(["int_rate","loan_amnt"],ascending=False)

对多列数据进行排序2
获取金额最小前10项

在完成了对数据表排序的操作后,我们可以对数据表进行简单的筛选,例如获取loan_amnt金额最小的前10名数据。具体的方法是先对lc数据表按loan_amnt升序排列,然后取前10名的数据。NaN值默认在排序结果的结尾显示。以下是具体代码和结果。与前面单列升序排列的代码相比只在结尾增加了.head()函数。

lc.sort(["loan_amnt"],ascending=True).head(10)

筛选最小前10项

获取金额最大前10项

获取金额最大前10项的代码与获取金额最小前10项略有差异,本来我们只需要复制前面的代码,然后将.head()函数改为tail()函数即可,但由于NaN值在排序的尾部,因此,我们将lc数据表按loan_amnt按降序排列,并取排名前10的数据。当然这并不是唯一的方法,我们还可以通过放弃NaN值的排序或者将NaN值在排序前部显示来解决这个问题。以下是具体的代码和执行结果。

lc.sort(["loan_amnt"],ascending=False).head(10)

筛选最大前10项
介绍完排序功能后再来看下筛选,在筛选功能上Pandas使用的是.loc函数。以下是Pandas官方对.loc函数的语法和使用方法的说明。

loc官方说明

单列数据筛选并排序

我们使用.loc对lc数据表中grade列为B值的数据条目进行了筛选操作,具体的代码和筛选结果如下。在代码中lc.loc[]是.loc函数的语法,lc[“grade”] == “B”是具体的筛选条件。由于数据表较大,因此在最后使用了head()函数只显示前5行筛选结果。从筛选结果来看grade列的值都为B。

lc.loc[lc["grade"] == "B"].head()

单列数据筛选_包含

筛选条件除了”等于”(==)以外,还可以使用”不等于”(!=)来排除列中特定的值。我们使用”不等于”来筛选grade列中不是B值的数据条目。以下是具体的代码和筛选结果,可以看到筛选结果中的grade列里已经不包含B值了。

lc.loc[lc["grade"] != "B"].head()

单列数据筛选_排除

很多时候我们只关注数据表中某几列的数据,这时可以在前面筛选代码的基础上增加要显示的列名称和显示顺序。下面是具体的代码和筛选结果。代码部分与之前相比增加了要显示的列名称 [“member_id”, “loan_amnt”, “grade”]。其余部分均没有改变。在筛选结果的数据表中可以看到仅显示了我们在代码中列出的三列。

lc.loc[lc["grade"] == "B", ["member_id", "loan_amnt", "grade"]].head()

单列数据筛选_包含并限定列

若要对筛选结果进行排序可以联合使用.loc函数和.sort函数。下面的代码中首先对数据表的grade列进行筛选,选择所有值为B的数据,并限定了结果中要显示的三列的名称。最后对筛选出的结果按loan_amnt的金额进行升序排序。

lc.loc[lc["grade"] == "B", ["member_id", "loan_amnt", "grade"]].sort(["loan_amnt"])

单列数据筛选_包含并限定列升序

在代码后面增加ascending参数,并将值设置为False就可实现对筛选结果的降序排列。以下为具体的代码和筛选及排序结果。

lc.loc[lc["grade"] != "B", ["member_id", "loan_amnt", "grade"]].sort(["loan_amnt"],ascending=False)

单列数据筛选_排除并限定列降序

多列数据筛选并排序

Pandas的.loc参数还可以同时对多列数据进行筛选,并且支持不同筛选条件逻辑组合。常用的筛选条件包括”等于”(==)”,不等于”(!),”大于”(>)”,小于”(<)”,大于等于”(>=)” ,小于等于”(<=)等等。逻辑组合包括”与”()和”或”()。下面我们将通过3条多列数据筛选代码逐一进行介绍。

第一条代码使用”与”逻辑,筛选出了grade等于B,并且loan_amnt金额大于5000的数据。并限定了显示的列名称。从筛选结果中可以看出grade列的值都是B,loan_amnt的金额均大于5000。

lc.loc[(lc["grade"] == "B") & (lc["loan_amnt"]>5000), ["member_id", "term" , "loan_amnt", "grade","sub_grade", "int_rate"]].head()

多列数据筛选_与

第二条代码也使用”与”逻辑,筛选出了grade不等于B,并且loan_status不等于Charged Off的数据,同时也限定了显示的列名称。从筛选结果中看grade列不包含B值,并且loan_status列不包含Charged Off值。

lc.loc[(lc["grade"] != "B") & (lc["loan_status"] != "Charged Off"),["member_id", "term" , "loan_amnt", "grade", "sub_grade", "loan_status"]].head()

多列数据筛选_与1

第三条代码使用了”或”逻辑,筛选出了grade列值为B,或loan_amnt列金额大于5000的数据,同时也限定了显示的列名称。从筛选结果来看,grade列除了B值以外还保留了其他的值,而这些值在loan_amnt列的金额均大于5000。换句话说,一条数据只要grade列或loan_amnt列任意之一符合筛选条件,这条数据就会被显示。

lc.loc[(lc["grade"] == "B") | (lc["loan_amnt"] > 5000), ["member_id", "term" , "loan_amnt", "grade","sub_grade", "int_rate"]].head()

多列数据筛选_或

多列筛选也可以进行排序,方法与单列筛选后排序基本一样,下面的代码对多列筛选后的结果按loan_amnt列进行升序排序。由于筛选条件中限定了loan_amnt列的值要大于5000,因此排序的结果从5020开始。

lc.loc[(lc["grade"] == "B") & (lc["loan_amnt"] > 5000), ["member_id", "term" , "loan_amnt", "grade","sub_grade", "int_rate"]].sort(["loan_amnt"])

多列数据筛选_或

对多列筛选结果进行降序排序只需在前面升序排序代码的基础上增加ascending参数,并将值设定为False即可。下面是多列筛选后降序排序的代码和结果。

lc.loc[(lc["grade"] == "B") & (lc["loan_amnt"] > 5000), ["member_id", "term" , "loan_amnt", "grade","sub_grade", "int_rate"]].sort(["loan_amnt"],ascending=False)

多列数据筛选_与降序

无论是”与”条件,还是”或”条件都可以在筛选后使用排序。下面代码是对使用了“或”逻辑条件的筛选结果进行降序排序的代码和结果。

lc.loc[(lc["grade"] == "B") | (lc["loan_amnt"] > 5000), ["member_id", "term" , "loan_amnt", "grade","sub_grade", "int_rate"]].sort(["loan_amnt"],ascending=False)

多列数据筛选_或降序

Pandas中的排序和筛选基本介绍完了,在实际的分析工作中,筛选只是分析过程中的一个步骤,很多时候我们还需要对筛选后的结果进行汇总,例如求和,计数,或计算均值等等。也就是Excel中常用的sumifs和countifs函数。

按筛选条件求和(sumif, sumifs)

在单列筛选的代码后增加求和条件就相当于Excel中的sumif函数的功能。下面的代码在单列筛选的代码后增加了.loan_amnt.sum()的求和字段,表示对数据表中所有grade列值为B的loan_amnt金额求和。

lc.loc[lc["grade"] == "B",].loan_amnt.sum()

按筛选条件求和_等于
除了包含条件外,也可以对排除某一条件的数据求和。下面的代码与之前的正好相反,对数据表中所有grade列值不为B的loan_amnt金额求和。

lc.loc[lc["grade"] != "B",].loan_amnt.sum()

按筛选条件求和__不等于

增加一个筛选条件就变成了Excel中的sumifs函数的功能。下面的代码中分别使用了两个条件对数据表进行筛选,并对最后的loan_amnt金额进行求和。

lc.loc[(lc["grade"] == "B") & (lc["loan_amnt"] > 5000)].loan_amnt.sum()

按筛选条件求和_多条件

按筛选条件计数(countif, countifs)

将前面的.sum()函数换为.count()函数就变成了Excel中的countif函数的功能,下面的代码对数据表中grade列值为B的loan_amnt笔数进行计数。

lc.loc[lc["grade"] == "B"].loan_amnt.count()

按筛选条件计数_等于

与前面代码相反,下面的代码对数据表中grade列值不为B的所有loan_amnt笔数进行计数。

lc.loc[lc["grade"] != "B"].loan_amnt.count()

按筛选条件计数_不等于

增加筛选条件,变成了Excel中的countifs函数的功能,下面的代码对数据表中grade列值为B,并且loan_amnt金额额大于5000的loan_amnt笔数进行计数。

lc.loc[(lc["grade"] == "B") & (lc["loan_amnt"] > 5000)].loan_amnt.count()

按筛选条件计数_多条件

按筛选条件计算均值(averageif, averageifs)

有了sumifs和countifs,当然也少不了averageifs,在Pandas中.mean()是用来计算均值的函数,将.sum()和.count()替换为.mean()。就是pandas版的averageif和averageifs。下面的代码中计算了数据表中grade列值为B的loan_amnt金额均值。相当于Excel中的averageif函数的功能。

lc.loc[lc["grade"] == "B"].loan_amnt.mean()

按筛选条件计算均值_等于

与前面的代码证号相反,下面的代码计算了数据表中所有grade列值不为B的loan_amnt金额均值。

lc.loc[lc["grade"] != "B"].loan_amnt.mean()

按筛选条件计算均值_不等于

增加一个筛选条件变成了Excel中的averageifs,不过这里好像又有一些不同,Excel中的sumifs,countifs和averageifs的计算逻辑是满足满足所有指定条件时,才对这些单元格进行求和或计数。而在下面的代码中我们使用了或条件,就是说只要满足两个条件中的任意一个都会进行计算。

lc.loc[(lc["grade"] == "B") | (lc["loan_amnt"] > 5000)].loan_amnt.mean()

按筛选条件计算均值_多条件或

按筛选条件获取最大值和最小值

最后两个是Excel中没有的函数功能,就是对筛选后的数据表计算最大值和最小值。方法很简单,将之前的sum()和count()换成max()和min()函数即可。下面是具体的代码和结果。

这条代码是计算数据表中grade列值为B的loan_amnt最大金额。

lc.loc[lc["grade"] == "B"].loan_amnt.max()

按筛选条件计算最大值

这条代码是计算数据表中grade列值不为B的loan_amnt最小金额。

lc.loc[lc["grade"] != "B"].loan_amnt.min()

按筛选条件计算最小值

以上这些也同样支持多条筛选后的计算,在此就不逐一列出了。

—【所有文章及图片版权归 蓝鲸(王彦平)所有。欢迎转载,但请注明转自“蓝鲸网站分析博客”。】—



Read more: http://bluewhale.cc/2016-08-06/use-pandas-filter-and-sort.html#ixzz4S2k7VseY
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用Pandas对数据进行筛选和排序 的相关文章

  • java集合集锦_

    java集合集锦 文章目录 java集合集锦一 java集合框架图二 集合简介三 集合遍历四 Arraylist 与 LinkedList 区别 五 ArrayList 与 Vector 区别呢 六 要对集合更新操作时 xff0c Arra
  • java map转为实体类的方法

    一 自己定义方法 span class token keyword public span span class token keyword static span span class token generics function sp
  • oracle 一行转多行

    span class token keyword SELECT span substr span class token punctuation span PBTYPE span class token punctuation span i
  • MiroTik 路由器配置无线中继模式(超细教程)

    关于MikroTik 看一下百度百科中关于MikroTik的介绍吧 MikroTik成立于1995年 xff0c 总部位于拉脱维亚首都里加 xff0c 主要从事开发路由器和无线ISP系统 1997年RouterOS系统 xff0c 2002
  • springmvc项目,启动报错Context initialization failed

    错误描述如下 xff1a springmvc项目 tomcat启动报错 Context initialization failed org span class token punctuation span springframework
  • Spring 总结(学习+面试)

    Spring学习笔记 文章目录 Spring学习笔记1 0 概述1 1使用Spring框架的好处1 2特点 2 0体系结构3 0创建Spring java工程 xff08 eclipse xff09 4 0通过Spring创建对象的方式5
  • tomcat启动,报错Failed to start component [StandardEngine[Catalina].StandardHost[localhost]]

    严重 RMI TCP Connection 3 127 0 0 1 org apache catalina core ContainerBase addChildInternal ContainerBase addChild start o
  • chrome扩展:manifest.json文件详解

    manifest json是扩展的配置文件 xff0c 指明了扩展的各种信息 一个manifest json格式如下 xff1a 必须的字段 3 个 34 name 34 34 MyExtension 34 扩展名称 34 version
  • 检测链表中是否存在回环(Java 版)

    检测链表中是否存在回环 xff0c 这里介绍两种方法 xff1a 快慢指针 xff1b HashSet 存储原理 xff1b 1 快慢指针 快慢指针检查 xff0c 就是定义两个指针 xff0c 一个走的快 xff0c 一个走的慢 xff0
  • 通过http接口进行批量post操作(json格式)

    通过 64 Test或者main方法来进行 相关依赖 poi lt dependency gt lt groupId gt org apache poi lt groupId gt lt artifactId gt poi lt artif
  • spring容器初始化bean后执行方法

    有时 xff0c 我们需要在启动bean时初始化bean属性 xff0c 例如读取perporties文件 xff0c 对属性进行赋值 xff1b 启动容器时让某个method方法执行等等 这时需要在进行配置 xff0c 让bean在注入时
  • 4个简单有效的网页视频下载方法,超级简单好用

    有很多网站的视频是没有下载功能的 xff0c 想要下载视频怎么办呢 xff1f 今天就分享给大家4个简单有效的网页视频下载方法 xff0c 多个平台都适用 xff0c 而且操作简单 xff0c 一看就会 xff01 一 审查元素下载 一个简
  • iptables详解

    5链 INPUT OUTPUT PREROUTING FORWARD POSTROUTING INPUT OUTPUT gt PREROUTING gt 是否为本机 gt FORWARD gt POSTROUTING gt 其他主机 所以
  • 浅谈一致性哈希算法 consistent hashing

    接触过分布式的小伙伴一定对一致性哈希算法这个词语不陌生 xff0c 那么到底什么是一致性哈希算法呢 xff1f 了解一致性哈希算法之前我们先了解下哈希取模 假设我们有三台服务器 xff0c 缓存3万张图片 当然我们可以均匀的分配到每个服务器
  • ubuntu20.04启用SSH

    新安装的ubuntu20 04默认是没有开启ssh的 xff0c 所以无法使用ssh登录系统 1 安装openssh server span class token function sudo span span class token f
  • 密码生成器

    import random def Range get num alist listout 61 while num gt 0 listout append alist random randint 0 len alist 1 num 61
  • centos7安装oracle中遇到的常见问题解决方法

    1 安装图形界面 yum y install gnome 2 安装vnc server yum y install vnc server vncpasswd 设置密码 vncserver启动vnc windows安装vnc客户端客户端 通过
  • java中keytool生成的jks证书转换为openssl格式证书

    一 通常jks文件包含了服务器的私钥 server key xff0c 服务器证书 server crt 根证书 ca crt 二 通过java的keytool工具导出成 PKCS12 格式文件 my p12 keytool importk
  • IBMX3650M4安装win2008Server操作指南

    IBMX3650M4安装win2008Server操作指南 由于IBM服务器是IBM原有的Linux系统 xff0c 所以需要在此硬件上安装Win 2008 Server系统 xff08 以下简称win8 xff09 xff0c 中间遇到了
  • windows远程桌面连接到服务器黑屏问题

    任务管理器使用组合键 Ctrl 43 Alt 43 End xff0c 于是打开了远程电脑的任务管理器 xff0c 取消 xff0c 即可返回桌面正常显示

随机推荐

  • p2p数据分析

    大数据在许多国家具有战略意义 xff0c 其原因不仅在少数巨头公司的应用 xff0c 而是大 中 小 微企业乃至个人 xff0c 都能利用大数据来创造新的价值 而互联网本身就是一个大数据的金矿 xff0c 利用它创造价值 xff0c 是时代
  • 关于The GPG keys listed for the "***" repository are already installed but they are not corret

    这个问题是在自己制作的repo源码库的时候出现的 xff0c 从字面上理解 xff0c 是 为 源码仓库出示的GPG密钥已经安装 xff0c 但不正确 首先 xff0c GPG密钥存在的目的是处于安全和规范考虑 xff0c RedHat在发
  • __stack_chk_fail问题分析

    一 问题 进程收到SIGABRT 信号异常退出 xff0c 异常调用栈显示 stack chk fail Build fingerprint 39 Pico A7H10 PICOA7H10 10 5 5 0 smartcm 16769120
  • 十套精美个人博客网站模板

    文件资源 点击下载 展示在下方 xff0c 点击你想下载的文件 xff0c 然后点击普通下载就能下载了 紫色的图片博客个人页面模板 红色的微博社交平台HTML模板 响应式生活博客设计网站HTML5模板 程序员个人博客模板 响应式的互联网IT
  • 高性能无锁环形队列 Disruptor

    Disruptor 环形队列 JLog 秒级百G级日志搜集 传输 存储解决方案 高性能无锁队列 Disruptor 高性能队列 Disruptor 使用教程 高性能队列Disruptor框架的详细说明与实战使用 SpringBoot 并发框
  • ubuntu20.04更换阿里的软件源

    新安装的ubuntu20 04的软件源是使用的国外的源 xff0c 因此在使用apt安装软件时速度并不怎么快 xff0c 建议大家更换为国内的源 xff0c 这样在使用apt安装软件时速度会有明显的提升的 ubuntu20 04 apt的配
  • mpi运行窗口无反应或者闪退

    原因有三 1 xff0c 服务未启动 2 xff0c 系统防火墙拦截
  • Newtonsoft.Json使用,C# Json文件读取,写入

    用学校作为例子 xff0c 有学校名称 xff0c 学校下面有班级 xff0c 班级有名字 xff0c 班级下面有学生 xff0c 这里面有数组 xff0c 有字段 using System using System Collections
  • Motrix全能下载工具使用

    Motrix是一款界面简约 功能丰富 专业可靠的全能下载工具 先下载 CSDN下载 Motrix zip下载 官方下载地址 Motrix 打开Motrix xff0c 将种子文件放到这里 开始下载
  • ActiveMQ-JMS(五):ObjectMessage的安全问题

    安全问题 按照apache官网的说明 xff0c 为了避免收到恶意代码 xff0c 引入了安全机制 xff0c 只允许指定的包里的对象能够被传输 原文如下 xff1a ObjectMessage objects depend on Java
  • 剑指offer 03

    span class token keyword class span span class token class name Solution span span class token punctuation span span cla
  • 「得印度者,得天下」聊聊你不知道的印度在线视频江湖

    印度 xff0c 一个神奇古老的国度 千百年来 xff0c 恒河水鉴证了古印度王朝的兴衰更迭 xff0c 壮丽的历史文化 xff0c 和印度文明缘起缘灭的生死轮回 时光飞转 xff0c 来到公元 2018年 恒河水波澜不惊一切如昨 xff0
  • Trinity简介(1)--用于无参考基因组的转录组de novo组装

    一 Trinity简介 Trinity xff0c 是由 the Broad Institute 开发的转录组de novo组装软件 xff0c 由三个独立的软件模块组成 xff1a Inchworm Chrysalis和Butterfly
  • Trinity进行转录组组装(2))

    1 Trinity进行转录组组装 Trinity进行转录组组装的典型命令如下 opt biosoft trinityrnaseq r20131110 Trinity pl seqType fq JM 50G left sample1 1 c
  • python的两种退出方式

    os exit vs sys exit 转自 xff1a http www cnblogs com gaott archive 2013 04 12 3016355 html 概述 python的程序有两种退出方式 xff1a os exi
  • R语言数据类型转化

    R语言数据类型转化 转自 xff1a http www wangluqing com 2014 09 10 r share34 有时候 xff0c 对于一些问题 xff0c 需要进行数据类型之间的转换 R提供了基本类型转换函数以解决数据类型
  • ubuntu20.04安装中文输入法

    虽然搜狗的官网已经宣传说已经支持2004 2010 xff0c 但是支持的并不完美 xff0c 闪退 xff0c 打不出字各种问题不断 xff0c 所以本文带领大家安装几款能够正常使用的中文输入法 但是正在我要发这篇博客的时候 xff0c
  • R语言做柱状图

    R语言做柱状图 转自 xff1a http www phperz com article 16 0102 180120 html 条形图代表在与条成比例的变量的值的长度矩形条数据 R使用函数barplot 来创建柱状图 R能够绘制柱状图垂直
  • R语言 PCA(主成分分析)

    R语言 PCA 转自 xff1a http www cnblogs com longzhongren p 4300593 html 1 关键点 综述 xff1a 主成分分析 因子分析 典型相关分析 xff0c 三种方法的共同点主要是用来对数
  • 使用Pandas对数据进行筛选和排序

    使用Pandas对数据进行筛选和排序 转自 xff1a http bluewhale cc 2016 08 06 use pandas filter and sort html 筛选和排序是Excel中使用频率最多的功能 xff0c 通过这