本文参考《利用Python进行数据分析》的第五章 pandas入门
2基本功能
介绍操作Series和DataFrame中的数据的基本手段。
重新索引reindex
当调用Series的reindex将会根据新索引进行重排;当某个索引值当前不存在,就引入缺失值;fill_value可以给缺失值赋值。
method选项:
对于DataFrame,reindex可以修改索引(行)、列,或者两个都修改。如果只传入一个序列,则会修改索引(行):
也可以使用ix()进行重新索引,比reindex更简洁:
丢弃指定轴上的项drop()
索引、选取和过滤
两种方式进行索引:普通的python切片&利用标签切片
对Series进行索引:
注意:利用标签切片运算与普通的Python切片运算不同,其末端是包含的:
对DataFrame进行索引就是获取一个或多个列:
通过切片或布尔型数组选取行:
通过布尔型DataFrame进行索引:
也可以通过ix从DataFrame中选取行和列的子集:
可以看到,pandas对象中的数据的选取和重排方式很多。下表简单总结了针对DataFrame数据的选取和重排方式:
算术运算和数据对齐
pandas最重要的一个功能是,可以对不同索引的对象进行算术运算。
对DataFrame,同时发生在行和列上:
在算术方法中填充值
当索引无法配对时填充一个特殊值(如0)
类似的,在对Series和DataFrame重新索引时,也可以指定一个填充值:
DataFrame和Series之间的运算
先看一个二维数组与其某行只差:
DataFrame和Series之间的运算也差不多:
如果某个索引值在DataFrame的列或Series的索引中找不到,则两个对象会被重新索引成并集,并在没有匹配的索引中插入NaN值
DataFrame列上的操作,加上axis=0:
函数应用和映射
numpy的nfuncs(元素级数组方法)也可用于操作pandas对象:
一种常见的操作是,将函数应用到各列或行,得到一维数组,可通过apply()方法实现:
除标量外,传递给apply的函数还可以返回由多个值组成的Series:
此外,元素级的PYTHON函数可是可用的,例如你想把frame中各个浮点值的格式化字符串,可使用
applymap()方法:
应用于Series时则是map()方法:
排序和排名
sort_index()
:对行或列索引进行排序:
对于Series
对于DataFrame
对于DataFrame
默认为升序,通过如下设置,可降序排序:
sort_index(by=)
:根据一个或多个列中的值进行排序:
order()
:Series按值排序,NaN默认被放到末尾
rank():排名,增设一个排名值,从1开始
默认情况下,并列的会分配一个平均值作为排名:
也可根据值在元数据中出现的顺序给出排名:
使用降序,则加上ascending=False
method选项:
对于DataFrame,则由axis来控制对行排名或列排名:
带有重复值的轴索引
虽然许多Pandas的函数(如reindex)都要求标签唯一,但也有索引不唯一的情况:
索引的is_unique属性可以告诉你索引值是否唯一:
数据选取时,索引对应多个值,则返回一个Series;对应单个则返回一个标量:
对于DataFrame也一样: