点击打开链接

7 – 数据框合并

当我们有收集自不同来源的数据时,合并数据框就变得至关重要。假设对于不同的房产类型,我们有不同的房屋均价数据。让我们定义这样一个数据框:


prop_rates = pd.DataFrame([1000, 5000, 12000], index=['Rural','Semiurban','Urban'],columns=['rates'])prop_rates


现在可以把它与原始数据框合并:


data_merged = data.merge(right=prop_rates, how='inner',left_on='Property_Area',right_index=True, sort=False)data_merged.pivot_table(values='Credit_History',index=['Property_Area','rates'], aggfunc=len)


这张透视表验证了合并成功。注意这里的 ‘values’无关紧要,因为我们只是单纯计数。
想了解更多请阅读Pandas Reference (merge)

8 – 给数据框排序

Pandas可以轻松基于多列排序。方法如下:


data_sorted = data.sort_values(['ApplicantIncome','CoapplicantIncome'], ascending=False)data_sorted[['ApplicantIncome','CoapplicantIncome']].head(10)


注:Pandas 的“sort”函数现在已经不推荐使用,我们用 “sort_values”函数代替。
想了解更多请阅读Pandas Reference (sort_values)

9 – 绘图(箱型图&直方图)

许多人可能没意识到Pandas可以直接绘制箱型图和直方图,不必单独调用matplotlib。只需要一行代码。举例来说,如果我们想根据贷款状态Loan_Status来比较申请者收入ApplicantIncome:


data.boxplot(column="ApplicantIncome",by="Loan_Status")


data.hist(column="ApplicantIncome",by="Loan_Status",bins=30)


可以看出获得/未获得贷款的人没有明显的收入差异,即收入不是决定性因素。
想了解更多请阅读Pandas Reference (hist) | Pandas Reference (boxplot)

10 – 用Cut函数分箱

有时把数值聚集在一起更有意义。例如,如果我们要为交通状况(路上的汽车数量)根据时间(分钟数据)建模。具体的分钟可能不重要,而时段如“上午”“下午”“傍晚”“夜间”“深夜”更有利于预测。如此建模更直观,也能避免过度拟合。
这里我们定义一个简单的、可复用的函数,轻松为任意变量分箱。


#分箱:def binning(col, cut_points, labels=None):#Define min and max values:minval = col.min()maxval = col.max()#利用最大值和最小值创建分箱点的列表break_points = [minval] + cut_points + [maxval]#如果没有标签,则使用默认标签0 ... (n-1)if not labels:labels = range(len(cut_points)+1)#使用pandas的cut功能分箱colBin = pd.cut(col,bins=break_points,labels=labels,include_lowest=True)return colBin#为年龄分箱:cut_points = [90,140,190]labels = ["low","medium","high","very high"]data["LoanAmount_Bin"] = binning(data["LoanAmount"], cut_points, labels)print pd.value_counts(data["LoanAmount_Bin"], sort=False)


想了解更多请阅读 Pandas Reference (cut)

11 – 为分类变量编码

有时,我们会面对要改动分类变量的情况。原因可能是:

有些算法(如罗吉斯回归)要求所有输入项目是数字形式。所以分类变量常被编码为0, 1….(n-1)
有时同一个分类变量可能会有两种表现方式。如,温度可能被标记为“High”, “Medium”, “Low”,“H”, “low”。这里 “High” 和 “H”都代表同一类别。同理, “Low” 和“low”也是同一类别。但Python会把它们当作不同的类别。
一些类别的频数非常低,把它们归为一类是个好主意。

这里我们定义了一个函数,以字典的方式输入数值,用‘replace’函数进行编码。


#使用Pandas replace函数定义新函数:def coding(col, codeDict):colCoded = pd.Series(col, copy=True)for key, value in codeDict.items():colCoded.replace(key, value, inplace=True)return colCoded​#把贷款状态LoanStatus编码为Y=1, N=0:print 'Before Coding:'print pd.value_counts(data["Loan_Status"])data["Loan_Status_Coded"] = coding(data["Loan_Status"], {'N':0,'Y':1})print '\nAfter Coding:'print pd.value_counts(data["Loan_Status_Coded"])


编码前后计数不变,证明编码成功。
想了解更多请阅读 Pandas Reference (replace)

12 – 在一个数据框的各行循环迭代

这不是一个常见的操作。但你总不想卡在这里吧?有时你会需要用一个for循环来处理每行。例如,一个常见的问题是变量处置不当。通常见于以下情况:

带数字的分类变量被当做数值。
(由于出错)带文字的数值变量被当做分类变量。

所以通常来说手动定义变量类型是个好主意。如我们检查各列的数据类型:


#检查当前数据类型:data.dtypes


这里可以看到分类变量Credit_History被当作浮点数。对付这个问题的一个好办法是创建一个包含变量名和类型的csv文件。通过这种方法,我们可以定义一个函数来读取文件,并为每列指派数据类型。举例来说,我们创建了csv文件datatypes.csv。


#载入文件:colTypes = pd.read_csv('datatypes.csv')print colTypes


载入这个文件之后,我们能对每行迭代,把用‘type’列把数据类型指派到‘feature’ 列对应的项目。


#迭代每行,指派变量类型。#注,astype用来指定变量类型。for i, row in colTypes.iterrows(): #i: dataframe索引; row: 连续的每行  if row['feature']=="categorical":data[row['feature']]=data[row['feature']].astype(np.object)elif row['feature']=="continuous":data[row['feature']]=data[row['feature']].astype(np.float)print data.dtypes

现在信用记录这一列的类型已经成了‘object’ ,这在Pandas中代表分类变量。
想了解更多请阅读Pandas Reference (iterrows)

用 Python 做数据处理必看:12 个使效率倍增的 Pandas 技巧(下)相关推荐

  1. 用 Python 做数据处理必看:12 个使效率倍增的 Pandas 技巧(上)

    导语 Python正迅速成为数据科学家偏爱的语言,这合情合理.它拥有作为一种编程语言广阔的生态环境以及众多优秀的科学计算库.如果你刚开始学习Python,可以先了解一下Python的学习路线. 在众多 ...

  2. 菜鸟做设计必看!有关如何做设计的整体思路,以及能否综合的笔记

    对Verilog 初学者比较有用的整理(转自它处) 作者: Ian11122840 时间: 2010-9-27 09:04 标题: 菜鸟做设计必看!有关如何做设计的整体思路,以及能否综合的笔记 所谓综 ...

  3. it招聘上说熟悉linux系统,运维入门:细说Linux,做IT必看

    原标题:运维入门:细说Linux,做IT必看 Linux进程和系统.任务管理 一.基本概念 程序:一组指令的集合 进程:程序的具体实现,执行程序的具体过程 子进程调用:fork-and-exec流程: ...

  4. micropython视频_零基础如何优雅入门“网红”Python?小白必看的MicroPython视频合集:从入门到精通!...

    零基础如何优雅入门"网红"Python?小白必看的MicroPython视频合集:从入门到精通! 若问时下最火的一门编程语言是什么?答案一定是Python. 就连高考都开始考Pyt ...

  5. 职场人必看:提高工作效率的6大法则

    提高工作效率的6大法则 01.先做最麻烦的事 02.建立未做事项清单 03.利用好碎片时间 04.给每一个工作任务限定时间 05.提前准备下一步 06.总结和思考 参考 进入职场, 你是否曾通宵达旦的 ...

  6. 十大python开发软件-必看 | 2020年,Python十大应用领域介绍!

    原标题:必看 | 2020年,Python十大应用领域介绍! python作为一门当下极其火爆的编程语言,得到世界范围内无数编程爱好者和开发者喜欢并不是偶然的,除了要比其他编程语言更容易入门,pyth ...

  7. 0基础快速入门Python,小白必看

    1. python的基本语法 1.1 变量 1.12 如何定义变量 1.13 输出一个变量 1.14 变量的数据类型 1.15 变量的运算 1.16 变量的输入 1.17 变量的类型转换 1.18 变 ...

  8. 用 Python 做石头剪刀布,看谁能赢过谁?

    作者 | 云朵君 来源 | 数据STUDIO 最近有粉丝朋友聊到用Python做个石头剪刀布的小游戏.我一寻思,还挺好玩.其实游戏编程是学习如何编程的一个好方法,它会使用许多我们在现实世界中看到的工具 ...

  9. 做报表必看!一个工具就可搞定中国式复杂报表需求

    中国式报表?对于做财务的"表哥表姐"肯定是不陌生的,但是对于大多数做报表的萌新来说,应该会提出灵魂三问:什么是中国式报表?中国式报表有什么特点?玩不转excel该如何制作中国式报表 ...

最新文章

  1. 用Thymeleaf在前台下拉列表取值
  2. 在美妙的数学王国中畅游
  3. 一些常见的光学标定板模式
  4. 获取SQL Server数据库增长和收缩事件的详细信息
  5. db2 控制台执行创建函数语句_DB2 从命令行创建SQL存储过程
  6. GdiPlus[40]: 不该忽略的一些基础结构
  7. 利用LVM管理磁盘系统
  8. 王者荣耀2.0代码优化版C++
  9. LOTO示波器 实测 开环增益频响曲线/电源环路响应稳定性
  10. 有关十二个“一”的文艺创作-拓展版
  11. 为什么计算机里没有桌面显示不出来,电脑开机不显示桌面怎么办解决教程
  12. 服务器网口显示感叹号,业务服务器或更新服务器连接失败(认证失败,黄色感叹号)怎么回事?...
  13. 设计一个分数类java_Java 有理数类 分数类 Rational类的设计与实现
  14. XML格式化在线工具
  15. [ODBC Driver 18 for SQL Server]SSL 提供程序: 证书链是由不受信任的颁发机构颁发的
  16. linux下文件压缩、解压缩方法(tar)
  17. SMI-S 统一SAN管理
  18. 用HTML+CSS做成的一个简单网页(小兔鲜儿)
  19. 关于redis多个哨兵sentinel在阿里云的坑 sdown sentinel或者failover-abort-not-elected
  20. Netty实现连接西门子PLC

热门文章

  1. 创建一个水平盒子java_你了解如何比较两个对象吗
  2. windows环境下tensorflow安装过程详解(亲测安装成功后测试那块)
  3. 将redis加入到elk日志系统里
  4. 程序员获取编程灵感的 10 种方式
  5. Linux的centos永久关闭防火墙的命令
  6. Swoole的think-swoole的安装
  7. Yii直接加载JS/CSS
  8. 代理服务器ip地址如何获得_详细教程:如何使用代理服务器进行网页抓取?
  9. 事务超时时间无效_阿里分布式事务组件 fescar/seata 对 XA 2PC 的改进及其设计思想...
  10. mysql从字符串中取子字符串_如何从开始于MySQL中特定位置的字符串中提取子字符串?...