当前位置: 首页 > news >正文

import pandas as pd 报错_Python数据处理,用pandas解决分段匹配,简单到没朋友

e85feb010d386c7a3bf68c924d04f623.png

转发本文并私信我"python",即可获得Python资料以及更多系列文章(持续更新的)

经常听别人说 Python 在数据领域有多厉害,结果学了很长时间,连数据处理都麻烦得要死。后来才发现,原来不是 Python 数据处理厉害,而是他有数据分析神器—— pandas

前言

本系列已经有一篇文章介绍 pandas 中实现 Excel 的 vlookup 函数的方式,但是 vlookup 中还有一个"模糊匹配"的功能,主要用于分段匹配,今天就来看看 pandas 中是如何做到同等效果。


案例1

今天,你接到一份紧急的临时需求,数据表格如下:

432834996bcece630cbfa482b00772e6.png
  • 200百万行的记录
  • 需要按照 分数 列,按规则计算出 评级

规则表如下:

20f31f9ca2ff65cf4c460d03873d1beb.png
  • 这是特意为 Vlookup 而设计的规则表

若按 pandas 来设计规则表,那么 Vlookup 的解决方式就会很麻烦。

怎么办?数据多到 Excel 也打不开,管你是 Vlookup 还是 Xlookup 也没用。


809c551bdde5fbcb96dcbaee2197d4db.png

多功能的 Vlookup

由于这次数据太多,用 Excel 已经不能打开此文件,因此我用少量数据简单演示一下如何用 Vlookup 解决此问题:

5e3e094362f7978730c79d4b4c335e29.png
  • 其实就是最后一个参数输入 1(True),即可
  • 很重要一点,规则表的 值 列,记得要排好序,否则结果错乱你也不知道

pandas 中的分段匹配

这种需求在数据处理一般称为"分箱",pandas 中使用 cut 方法做到:

1802f3d1844e56f80609134cb3a32b57.png
  • 我们从 csv 读取数据,从 Excel 中读取规则表
  • 注意这是 pandas 的顶层方法,因此是 pd.cut()
  • 第1参数传入判断数据列
  • 第2参数传入规则表的 值 ,但是 cut 方法必需给定所有区间的边界。像本例子的规则表,没有高于120分的结束边界,我们需要添加一个很大的值作为结束边界
  • 参数 right,设置为 False ,只是为了与 vlookup 效果一致而已,表示:"右区间边界开放",比如:120分,被划分到 A+ 评级
  • 参数 labels,就是返回的结果

可以看到 pandas 可以轻松从任意数据源中读取数据,本例中即使你的数据源在各种数据库也是没问题 注意,bins 没有升序排序时,会报错。这是非常好的设计


看文字很难理解,看看这个示意图,应该清晰很多:

e3e9b1544255430fd23110de8776c33d.png

1efdc221b51841dd47e8bb0c036270f0.png

案例2:自动划分

在实际分析工作中,你可能一开始并不清楚到底规则表的各个节点怎么定义才合理。

比如你现在希望划分3个段,但你不知道各个段之间的边界怎么定义才合理。那么可以这样子调用 cut 方法:

441d4cda55521b2223ccec0b76aedd2c.png
  • cut 方法的第2参数,我们指定3,表示划分3段
  • 不指定参数 labels,这可以看到划分的区间。

你也可以指定 labels:

3848b19a29f781fe714d9eb084e4a54b.png

最后的划分结果尽可能每个区间数量平衡,来看看各区间的数量:

d6846e667cc061901a95ae932d83a139.png

总结

  • pd.cut() ,对数据做分箱处理
  • 参数 bins 可以指定自己的规则表,也可以直接指定划分段数目
  • 指定划分段数目时,会自动定义各个划分区间
  • 当指定的 bins 规则表没有升序排序时,会报错

需要源码的小伙伴请转发本文并私信我"python"

如果希望从零开始学习 pandas ,那么可以看看我的 pandas 专栏。

相关文章:

  • cricheditview实现语法高亮和行号_[源码和文档分享]基于VC++和QT实现的图的可视化工具...
  • table 内 下拉列表 被遮挡_Emacs Hack - 通过列表数据创建表格
  • 取出url中的字符_python爬虫,解决大众点评字符库反爬机制的经验
  • 单调有界定理适用于函数吗_实数系的连续性定理
  • java map获取第一个值_深入理解 Java 函数式编程(4): 使用 Vavr 进行函数式编程...
  • 层次聚类算法_聚类分析算法
  • centos如何复制粘贴_教你Vim编辑器,如何删除一行或者多行内容
  • java更改模块状态_2020年4月Github上最热门的Java开源项目
  • 佳能g3800故障灯说明书_啄木鸟家庭维修|天花机故障灯闪什么问题
  • 曲面积分的投影法_第二型曲面积分的投影法与对称性
  • python常用包及主要功能_python常用包及功能介绍
  • **Java有哪些悲观锁的实现_乐观锁、悲观锁、Redis分布式锁和Zookeeper分布式锁的实现以及流程原理...
  • amd关闭超线程_直接提高40帧?超线程开启/关闭游戏对比测试
  • easyui 控制某列显示不显示_称重显示控制器工作原理
  • python编写脚本教程_Python编写生成验证码的脚本的教程
  • #Java异常处理
  • [nginx文档翻译系列] 控制nginx
  • 《网管员必读——网络组建》(第2版)电子课件下载
  • 「前端早读君006」移动开发必备:那些玩转H5的小技巧
  • ES6之路之模块详解
  • happypack两次报错的问题
  • in typeof instanceof ===这些运算符有什么作用
  • Java 网络编程(2):UDP 的使用
  • JavaScript设计模式与开发实践系列之策略模式
  • miniui datagrid 的客户端分页解决方案 - CS结合
  • mysql 5.6 原生Online DDL解析
  • React 快速上手 - 06 容器组件、展示组件、操作组件
  • Sass 快速入门教程
  • 读懂package.json -- 依赖管理
  • 微信支付JSAPI,实测!终极方案
  • 学习ES6 变量的解构赋值
  • 译有关态射的一切
  • 智能合约开发环境搭建及Hello World合约
  • 主流的CSS水平和垂直居中技术大全
  • 完善智慧办公建设,小熊U租获京东数千万元A+轮融资 ...
  • (3)Dubbo启动时qos-server can not bind localhost22222错误解决
  • (c语言)strcpy函数用法
  • (MIT博士)林达华老师-概率模型与计算机视觉”
  • (二)hibernate配置管理
  • (二十四)Flask之flask-session组件
  • (附源码)计算机毕业设计SSM教师教学质量评价系统
  • (论文阅读30/100)Convolutional Pose Machines
  • (没学懂,待填坑)【动态规划】数位动态规划
  • (切换多语言)vantUI+vue-i18n进行国际化配置及新增没有的语言包
  • (原創) X61用戶,小心你的上蓋!! (NB) (ThinkPad) (X61)
  • (转)C#开发微信门户及应用(1)--开始使用微信接口
  • (转)Google的Objective-C编码规范
  • (转载)利用webkit抓取动态网页和链接
  • (转载)虚函数剖析
  • .gitignore文件—git忽略文件
  • .NET 2.0中新增的一些TryGet,TryParse等方法
  • .NET CLR Hosting 简介
  • .NET/C# 使用反射注册事件
  • /*在DataTable中更新、删除数据*/
  • /etc/sudoers (root权限管理)