pandas库是本书后续内容的首选库。它含有使数据分析工作变得更快更简单的高级数据结构和操作工具。pandas是基于NumPy构建的。让以NumPy为中心的应用变得更加简单
要使用pandas, 首先得熟悉它的两个主要数据结构:Series和DataFrame,虽然它们不能解决所有问题,但它们为大多数应用提供了一种可靠的、易于使用的基础
本文摘要
- Series
- DataFrame
- 可以输入给DataFrame构造器的数据
- 索引对象
- 基本功能
- 重新索引
- 丢弃指定轴上的项
- 索引、选取和过滤
- 对DataFrame的索引选项(重要)
- 算数运算和数据对齐
- 在算数方法中填充值
- DataFrame和Series之前的运算
- 函数应用和映射
- 1.NumPy的ufuncs(元素级数组方法)也可用于操作pandas对象:
- 2.行列级自定义函数
- 3.使用 applymap 而非 apply 就可以采用元素级别的方法
- 排序和排名
- Series排序
- DataFrame排序
- 对 Series 值的排序
- 对DataFrame的行依据某个列的值进行排序
- 排名
- 带重复值的轴索引
- 汇总和计算描述统计
- 相关系数与协方差
- 唯一值、值计数以及成员资格
- 1.唯一值
- 2.计数
- 3.成员资格
- 处理缺失数据
- 1.滤除缺失数据
- 2.填充缺失数据
- 层次化索引
首先是常用和必要的引入
Series
Series是一种类似于一维数组的对象,它由一组数据(各种NumPy数据类型)以及以一组与之相关的数据标签(即索引)组成。仅由一组数据即可产生最简单的Series
它拥有一些性质
如果希望指定各个数据点的索引,可以将这个索引的数据作为第二个参数传入series函数中
这样就可以通过指定的索引值来访问具体数据
还可以将Series看成一个定长的有序字典,因为它是索引值映射到数据值的一个映射。它可以用在许多原来需要字典参数的函数中
如下
既然如此,也可以通过字典来创建Series
已经建好一个Series之后,如果再次对这个Series调用Series方法,就可以从原来的内容中筛选出部分需要的数据
如下
pd 中的 isnul 和 notnull 可以直接用于检测Series中值是否为NULL
对于许多应用而言,Series的最重要的一个功能是:它在算术运算中会自动对齐不同索引的数据
此外,Serie对象本身及其索引都有一个name的属性,该属性跟pandas的其他关键功能的关系非常密切
Series的索引可以通过赋值的方式直接修改
DataFrame
DataFrame是一个表格型的数据结构,它含有一组有序的列,每列可以是不同的值类型(数值、字符串、布尔值等)。DataFrame既有行索引也有列索引、它可以被看做由Series组成的字典(共用同一个索引)
构建DataFrame的方法有很多,最常用的一种是直接传入一个由等长列表或NumPy数组组成的字典
结果DataFrame会自动加上索引,并且全部列会被有序排列
如果指定了列序列,则DataFrame的列就会按照指定的顺序进行排列
跟Series一样,如果传入的列在数据中找不到,就会产生NA值
类似于字典标记的方法或属性的方式,可以将DataFrame的列获取为一个Series
如下
对DataFrame的行也可以进行索引,比如用索引字段 ix
类似NumPy数组,也可以将列以赋值的方式进行修改
或者
将列表或者数组赋值给某个列时,其长度必须跟DataFrame的长度相等。如果赋值的是一个Series,就会精确匹配DataFrame的索引,所有的空位都会被填上缺失值
为不存在的列赋值将会创建出一个新列。关键字del用于删除列
注意,以索引的方式返回的列只是相应数据的视图而已,不是副本。对返回的Series的任何就地修改全都会反映到源DataFrame上
另外一种创建DataFrame的方式是通过嵌套字典。这会被解释为:外层字典的键作为列,内层键作为索引
对已经建好的DataFrame的处理又多种多样了
由Series组成的字典类似
可以输入给DataFrame构造器的数据
- 二维ndarray
- 由数组、列表或元组组成的字典,每个序列变成DataFrame的一列。所有序列程度必须相同
- NumPy的结构化/记录数组
- 由Series组成的字典
- 由字典组成的字典(前文中的嵌套字典)
- …
-
如果设置了DataFrame的index和columns 的name属性,这些信息也会显示处理
跟Series一样,values属性会以二维ndarray形式返回DataFrame中的数据
索引对象
Pandas的索引对象负责管理轴标签和其他元数据(比如轴名称等)。构建Series或DataFrame时,所用到的任何数组或其他序列的标签都会被转换成一个Index
访问方法与Series相似
但是Index对象是不可修改的(immutable),下面这条语句会导致
不可修改性非常重要,因为这样才能使Index对象在多个数据结构之间安全共享
除了长得像数组,Index的功能也类似一个固定大小的集合,也就是说可以通过类似 这样的方法访问
index的方法和属性
- append
- diff
- intersection
- union
- isin
- delete
- unique 计算Index中的唯一值
- …
基本功能
重新索引
pandas对象的一个重要方法就是重新索引,当某个索引值当前不存在,就引入缺失值
也可以指定值填充
对于时间序列这样的有序数据,重新索引时可能需要做一些差值处理,method方法可以达到此目的,比如下面的用后向值填充
此外reindex的(插值)method选项
- ffill 前向填充
- bfill 后向填充
对于DataFrame,reindex可以修改行索引,列索引,也可以两个都修改,如果只传入一个,则重新索引行
使用 ix 标签索引功能,重新索引任务变得更加简洁
reindex函数的参数
- index
- method
- fill_value
- limit
- level
- copy
丢弃指定轴上的项
先建立一个pandas结构
如果试图删除一个不存在的行或列,则会触发一个
删除一整行的元素可以直接用
如果希望删除一整列的元素,则需要增加一个的说明
索引、选取和过滤
对行元素的索引总是十分简单的,跟纯Python的数组和Series类似,不同的是,这里的切片是包含末端的(仅是对于用标签切片,用数字切片还是不包含末端的)
先建立一个pandas结构
下面是索引的示例
使用前文中用到的data
这样看只是需要在调用drop方法的时候特别地标明 而在简单的索引的时候是可以直接索引到的
下面再展示一些其他的选取方法
ix 方法也很有意义
对DataFrame的索引选项(重要)
- obj [ val ] 选取DataFrame的单个列或一组列
- obj.ix [ val ] 选取DataFrame的单个行或一组行
- obj.ix [ :, val] 选取单个列或列子集
- obj.ix [ val1, val2] 同时选取行或列
- reindex 方法 将一个或多个轴匹配到新索引
总结,如果希望总是成功选取,建议使用 ix 方法
算数运算和数据对齐
pandas最重要的一个功能是,它可以对不同索引的对象进行算数运算。将对象相加时,如果存在不同的索引对,则结果的索引就是该索引对的并集
下面是一个例子,先建立两个Series
可见,重叠的项(都有的)值相加,不同的项,为NA值
如果在DataFrame,对齐操作会发生在行和列上
在算数方法中填充值
为了避免不重叠值会产生NA,可使用add方法,并且指定 fill_value = 0
灵活的算数方法
- add
- sub
- div
- mul
DataFrame和Series之前的运算
首先展示一个NumPy的广播
DataFrame的广播是类似的
如果希望匹配行且在行上广播,则必须要使用算数运算方法,如下
函数应用和映射
1.NumPy的ufuncs(元素级数组方法)也可用于操作pandas对象:
2.行列级自定义函数
也可以对DataFrame采用自己定义的函数,默认是对列
增加 axis 说明可以方便地转化到对行操作
除了标量以外,传递给apply函数的还可以返回由多个值组成的Series
3.使用 applymap 而非 apply 就可以采用元素级别的方法
如下是一个将浮点数格式化为字符串的方法
排序和排名
Series排序
可以直接使用 sort_index()方法
DataFrame排序
默认对行进行排序
下面两个例子展示了如何通过更改传入参数,实现降序排序和按照列排序
对 Series 值的排序
这个地方采用书上的 order() 方法会出现错误,所以这里采用 sort_value() 方法
对DataFrame的行依据某个列的值进行排序
后面一种方法实现了先按照 ‘a’ 排序, 后按照 ‘ b’ 排序
排名
排名 rank 与排序相似,会增设一个排名值,从1开始一直数到数组中的有效值,这里可以看出,相同值对应的排名是相同的,但这不是简单的 “并列第几” ,而是 “为各组分配一个平均排名” 的方式来破坏平级关系
排名时用于破坏平级关系的method选项:
带重复值的轴索引
截止目前,所有的范例都有唯一的轴标签(索引值),虽然许多pandas函数都有唯一标签值的要求,但是这并不是唯一的。
下面是一个例子
可以通过 方法判断标签是否唯一,当然先要取 index
汇总和计算描述统计
跟NumPy数组方法相比,pandas的统计方法,如都是适用于缺失数据的
用于查找最大的数
cumsum是用于计算累加值的
describe方法可以生成汇总统计
描述和汇总统计
- count
- describe
- min、max
- argmin、argmax
- idmax
- mean、median
- var、std
- 还有三阶矩等统计量…
相关系数与协方差
这部分安装包的时候出了点问题,暂时不写
唯一值、值计数以及成员资格
1.唯一值
2.计数
pd还有一个顶级方法也可以用于计数
3.成员资格
有时,你可能希望得到DataFrame中多个相关列的一张柱状图,可用如下方法
处理缺失数据
pandas使用浮点值NaN(Not a Number)表示浮点和非浮点数组中的缺失值。
检测可以通过方法,此外,Python内置的也会被当成NA处理
处理缺失数据有以下方法
- dropna(根据标签的值中是否有缺失数据对轴标签进行过滤,可以通过调节阈值来调节对缺失值的容忍度)
- fillna
- isnull
- notnull
1.滤除缺失数据
筛选出非NA项
dropna默认的 how 参数是 ‘any’, 意为只要有NA,就丢弃全行数据
如果把 how 参数改为 ‘all’ 就可以仅删除全部都是NA的数据
如果希望对列进行操作,只要把 axis 参数改成 1 即可
2.填充缺失数据
首先建立一个有NA值的DataFrame
用字典的方式可以对不同的列用不同的值进行填充
fillna默认是返回新数组,但是也可以通过修改参数的方法,就地修改
此外还可以通过参数等方式,前向填充或者后向填充
fillna参数
- value
- method
- axis
- inplace
- limit
层次化索引
层次化索引也是pandas的一项重要功能,它使你能够在一个轴上拥有多个索引级别
关于重新分级顺序、根据级别汇总统计、使用DataFrame的列、其他有关pandas的话题 在本文中省略
大功告成
疑惑:
1.对DataFrame中某列组成的Series进行索引,如果直接访问单个元素会出错,访问一个切片的元素就没有问题切片
单个元素
得到
2.使用reindex同时重新索引行和列出错
得到
心得:
看到函数应用与映射一部分,心里一颤,怎么可能这么好用。虽然还没有非常了解,但已经开始相信pandas将会在以后的数据处理工作中起到重要的作用
还差最后一个单元!
以上就是本篇文章【ch05-pandas入门】的全部内容了,欢迎阅览 ! 文章地址:http://w.yusign.com/quote/7075.html 行业 资讯 企业新闻 行情 企业黄页 同类资讯 网站地图 返回首页 述古往 http://w.yusign.com/mobile/ , 查看更多