pandas选取符合条件的行_数据科学 | 手把手教你用 pandas 索引、汇总和处理缺失数据...

↑↑↑↑↑点击上方蓝色字关注我们!


1ea492b1a935f973305174d486602eaf.png


『运筹OR帷幄』原创

作者:Paul

编者按

pandas作为python中非常重要的数据处理工具,它提供了很多灵活的数学和统计方法。在数据处理中,经常需要对数据进行索引的转换,以适应不同的统计和作图的需要;另外在许多数据分析工作中,缺失数据是经常发生的。因此,作为pandas系列文章的一部分,本文将重点关注pandas对数据索引、汇总和缺失数据的处理的相关方法。本文十分详细地列出了具体实例介绍了这些方法,十分建议各位对pandas学习感兴趣的同学下载代码亲自运行进行实际操作。

pandas 索引对象

pandas的索引负责管理轴标签和其他如轴名称等元数据。构建Series或DataFrame时,所用到的任何数组或其他序列的标签都会被转换成一个Index。

Index对象是不可修改的(immutable),因此用户不能对其进行修改。不可修改性非常重要,因为这样才能使Index对象在多个数据结构之间安全共享。

pandas中主要的index对象

 ● index:最泛化得Index对象,将轴标签为一个由Python对象组成的Numpy数组

 ● Int64Index:针对整数的特殊Index

 ● MultiIndex:层次化索引对象,表示单个轴上的多层索引,可以看做由原数组组成的数组

 ● DatetimeIndex:存储纳秒级时间戳

 ● PeriodIndex:针对Period数据的特殊Index.

Index的方法和属性

 ● append:append连接另一个Index对象,产生一个新的Index

 ● diff:计算差集,并得到一个Index

 ● intersection:计算交集

 ● union:计算并集

 ● delete:删除索引i处的元素,并得到新的Index

 ● drop:删除传入的值,并得到新的索引值

 ● insert:将元素插入到索引a处,并得到新的Index

 ● unique:计算Index中唯一的数组

实例如下

0ef681d7c0c4109479ffc9d2d966e906.png

首先建立一个Series对象,这里直接对index赋值。

d2f453cef93081c4a0044dcf85094f91.png

或者可以用Index对象来建立index。

2e691af7ac8b4d52ed8330d7f81ca1bc.png

这里用来判断列和索引是否在DataFrame中存在。

1246b8fe6b98b64ce722680122bff62b.png

Pandas 重新索引

有时我们需要重新对pandas对象进行索引赋值。

 ● Series的reindex将创建一个适应新索引的新对象并根据新索引进行重排。当某个索引值不存在时,引入缺失值进行填充。

 ● 对于序列数据(如有时间标签的数据),重新索引时可能需要做一些插值处理。其中可以用method选项即可达到此目的。

reindex函数的参数

 ● index:用作索引的新序列。即可以是Index实例,也可以是其他序列的python数据结构

 ● method:插值填充方式,ffill或bfill

 ● fill_value:在重新索引过程中,需要引入缺失值时使用的替代值

 ● limit:前向或后向填充时的最大填充量

 ● level:在MultiIndex的指定级别上匹配简单索引,否则选择其子集

首先是简单的用reindex方法来重新指定索引:

4722c87f7c5930ef390b1111b8dc97ab.png 9f19bef306d94ac47eb7cabfb2839537.png 7ac87a3f52d09aa70501601fdeeae710.png f69242ca865a13784933f6c011e819f0.png 0596756d867af12b0f25a095ae7e7ffd.png 4beafbdd181321cb0e71a458ac150c56.png aa84cd0433869a502ef037c6da56a175.png 588e392adfdc35972444c311405ca192.png

丢弃/删除指定的行或者列

删除某一列或者行上的一个或多个项很容易,只需要这些数据的索引组成的数组或列表即可。由于需要执行一些数据整理和集合逻辑,所以drop方法返回的是一个在指定轴上删除了指定值的新对象:

b1d0fa3e30996aadf874b77df7d27000.png 97501cf55aa20f6fd1a77fd5289d611d.png 68bb58b23b3d3a7fc4a84ef19309836c.png

Pandas 索引、选取和过滤

 ● Series索引的工作方式和NumPy数组的索引相似,只是Series的索引值不只是整数。

 ● 利用标签的切片运算与普通的Python切片运算不同,其末端是包含的(inclusive)。

 ● 对DataFrame进行索引其实就是获取一个或多个列

 ● 为了在DataFrame的行上进行标签索引,引入了专门的索引字段ix。

DataFrame的索引选项

 ● obj[val]:选取DataFrame的单个列或一组列。

 ● obj.ix[val]:选取DataFrame的单个行或一组行

2091e69292e121975d4c55d869155839.png e2be08c3e061b4c7731cf3ad68c1978d.png 552c91464ec1eea61629cc44fc818fa2.png 34f4765ba2f2407b1d6619a80c02c5a2.png ae9ec7f6a44c98e3b13bf45ba37200ae.png 42ca737a816f6a558a5f36f6e7697c27.png

Pandas 算术运算和数据对齐

 ● 对不同的索引对象进行算术运算

 ● 自动数据对齐在不重叠的索引处引入了NA值,缺失值会在算术运算过程中传播。

 ● 对于DataFrame,对齐操作会同时发生在行和列上。

 ● fill_value参数

 ● DataFrame和Series之间的运算

bf3aed42fc616a99b20845f0357d66ce.png

0666ca78864962faecf53b05d0826e66.png 86a34f40aba552ca1487fd2029fd9b2d.png d364b78489805e8531de59861d2cc196.png ee045371123411b574e29d148dbc96ff.png f2fb0426c839edc7fef6d4dbebd5f7c9.png 464abd3fae0f90c303bb3df00bc34ebe.png 75aee42b1e38bbfa1dfe6742f3f2d577.png

Pandas 函数应用和映射

 ● numpy的ufuncs(元素级数组方法)

 ● DataFrame的apply方法

 ● 对象的applymap方法(因为Series有一个应用于元素级的map方法)

95d6eacdd794a22266fd2484f96eec93.png 7ccbb70365f4c42834e8fb1bd4cf3eda.png b39b70c9ba0c30a27bf6d5190525d40b.png

Pandas 排序和排名

 ● 对行或列索引进行排序

 ● 对于DataFrame,根据任意一个轴上的索引进行排序

 ● 可以指定升序降序

 ● 按值排序

 ● 对于DataFrame,可以指定按值排序的列

 ● rank函数

b8e8c9cafbfd8596ed1c4a267b7fee8e.png fd81bd56478c37f51cd6575224ea4a2d.png 06ee552fd69a7758f01f831633be4c13.png 372d5d7661ecae448df24aedd5a8f579.png f803f30c869f51c9d6744e232aef94ef.png

Pandas 带有重复值的索引

 ● 对于重复索引,返回Series,对应单个值的索引则返回标量。

a1e71dacf7511745ebd30877479e0673.png 39a9b27287506fe2ffeac6ee4cc292ce.png

Pandas 汇总和计算描述统计

 ● 常用方法选项

 ♢ axis:指定轴,DataFrame的行用0,列用1

 ♢ skipna:排除缺失值,默认值为True

 ♢ level:如果轴是层次化索引的,则根据level选取分组

Pandas 常用描述和汇总统计函数

count:非NA值得数量

describe:针对Series或者各DataFrame列计算汇总统计

min,max:计算最小值和最大值

argmin,argmax:计算能够获取到的最小值和最大值的索引位置

idxmin,idxmax:计算能够获取到的最小值和最大值的索引值

sum:值的总和

mean:值的平均数

median:值得算术中位数

mad:根据平均值计算平均绝对离差

 ● 数值型和非数值型的区别

 ● NA值被自动排查,除非通过skipna选项

ffd603e4b07214e5a4d9ea61b92dfc57.png d66916a80e78ee6023fa556a5516d6dc.png 2b64e1a1373d3074b245ae640687c47d.png 2fbeca45c7e0ff199a722e228c02d8c9.png 73d942938a631ef629720d253490a051.png

Pandas 汇总和计算描述统计 相关系数与协方差

 ● 相关系数:相关系数是用以反映变量之间相关关系密切程度的统计指标。(百度百科)

 ● 协方差:从直观上来看,协方差表示的是两个变量总体误差的期望。如果两个变量的变化趋势一致,也就是说如果其中一个大于自身的期望值时另外一个也大于自身的期望值,那么两个变量之间的协方差就是正值;如果两个变量的变化趋势相反,即其中一个变量大于自身的期望值时另外一个却小于自身的期望值,那么两个变量之间的协方差就是负值。

Pandas 汇总和计算描述统计 唯一值以及成员资格

常用方法

 ● is_in:计算一个表示Series各值是否包含于传入的值序列中的布尔型数组

 ● unique:计算Series中唯一值数组,按发现的顺序返回

 ● value_counts:返回一个Series,其索引为唯一值,其值为频率,按计算数值降序排列

7ea1722c2056c57c8d69426eaa9b538d.png 54cd33d17c00b31263df8a0c6c462eb7.png 657b8eb82d8c6400760d5337844b9dec.png

Pandas 处理缺失数据

 ● NA处理方法

 ♢ dropna:根据各标签的值中是否存在缺少数据du

 ♢ fillba:样本值的标准差

 ♢ isnull:样本值的偏度

 ● NaN(Not a Number)表示浮点数和非浮点数组中的缺失数据

 ● None也被当作NA处理

1776482ece8237e37fea8f6078f6f1d8.png

Pandas 滤除缺失数据

 ● dropna

 ● 布尔索引

 ● DatFrame默认丢弃任何含有缺失值的行

 ● how参数控制行为,axis参数选择轴,thresh参数控制留下的数量

f5dffc9375de7448ef64925afc3a53b3.png b4927f328656ec6b42b5fc0d3040f089.png 2118416210e471d6666efd8b7591853d.png

Pandas 填充缺失数据

 ● fillna

 ● inplace参数控制返回新对象还是就地修改

90f2c4268f04905aa1823da3f35772bd.png 5c07527c3a0cd0329435519102943e6a.png 3a7c2f8f071d503a385d044e9d065b6e.png 612ddb6f59f7bdc4ce4991f3686204c1.png 3313837ef2b6c18f7d67122983c569a9.png e10a5ee867f2b65b65821f53a03e4090.png

Pandas 层次化索引

 ● 使你能在一个轴上拥有多个(两个以上)索引级别。抽象的说,它使你能以低纬度形式处理高维度数据。

 ● 通过stack与unstack变换DataFrame

9ef415991ec344f2a94c9330e0e511cb.png 3fb093cbbe77588cba89eb37c514d001.png 81b633ac9c61bf4d6b8a4f2b31d4fb39.png b9f7d25c7f977bf05fff1f0550d7e75d.png 90c092b02cb8faa4054c2bd98e745095.png

重新分级顺序

 ● 索引交换

 ● 索引重新排序

691c5ac6cda2aff9c63c698fc718294d.png 89ccc3218f13fd983b73f36eada255fa.png

根据级别汇总统计

 ● 指定索引级别和轴

ba9b0abe640b0a601d00a9949b6eca5e.png

层次化索引 使用DataFrame的列

 ● 将指定列变为索引

 ● 移除或保留对象

 ● reset_index恢复

f7727e7ccac985dfdb6bdcf709a55d9f.png 0e7a784b836be9a7d9e9980a7f192ea5.png

整数索引

 ● 歧义的产生

 ● 可靠的,不考虑索引类型的,基于位置的索引。

9ce771b781b87266c4636b967e421147.png 4e8cfc64f931b2e3379f8c927cf23959.png

面板(Pannel)数据

通过三维ndarray创建pannel对象

 ● 通过ix[...]选取需要的数据

 ● 访问顺序:item -> major -> minor

 ● 通过stack展现面板数据

3d023913e69e30c280209a77bf2c164c.png

参考文献:

1.pandas toolkit

2.pandas官方文档:

https://pandas.pydata.org/pandas-docs/stable/index.html

相关文章推荐

读完这篇文章不过瘾?请继续关注我们上一期的文章,来看看我们是如何用python分析周杰伦专辑所有的歌词,并用热词重写《说好不哭》。

点击蓝字标题,即可阅读 《数据科学 | 分析周杰伦75775字歌词后,我们用他最爱的词重写了《说好不哭》》

其他

数据科学 | 避坑!Python特征重要性分析中存在的问题

数据科学 | 『运筹OR帷幄』数据分析、可视化、爬虫系列教程征稿通知

温馨提示

可以在 公众号后台 回复关键词:“pandas索引”获取本文示例代码与文件,如果觉得有用, 请勿吝啬你的留言和赞哦!~

—— 完 ——

512b924153c76d5117c6341739076bb5.png

f04d4d8c871ab6e87294cb7a93ba2713.gif

a7d6c11b48ebd05e362b27c91ee47e84.gif

文章申明

Feb. 2020

文章作者:Paul

责任编辑:Paul  周岩

审核编辑:阿春

微信编辑:玖蓁

本文由『运筹OR帷幄』原创发布

如需转载请在公众号后台获取转载须知

fea59add035b510fe09c1d404ec25393.png fea59add035b510fe09c1d404ec25393.png

d6559d108f76e5e916b41a1c18bff624.png

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值