团子的pandas库总结(2)

上一篇文章介绍了pandas库的基本数据结构,以及其用法,这篇文章介绍pandas库的基本功能,归纳总结series和dataframe中数据交互的基础机制。

基本功能

1.重建索引

reindex是pandas对象的重要方法,该方法用于创建一个符合新索引的新对象。
obj2=obj1.reindex([‘a’,‘b’,‘c’])
调用reindex时会将数据按照新的索引进行排列,如果某个索引值之前并不存在,则会引入缺失值。
在使用时间序列等顺序数据时,在重建索引时可能会需要进行插值或者填值,method可选参数允许我们使用如ffill等方法在重建索引时插值,ffill方法会将值向前填充。
obj3.reindex(range(6),method=‘ffill’)

在dataframe中,reindex可以改变行索引、列索引,也可以同时改变二者。默认情况下传入列表改变行索引,使用columns重建列索引,frame.reindex(columns=state)。

2.轴向上删除条目

drop方法会返回一个删除值的对象,默认根据行标签删除值。
obj.drop(‘c’)

可以通过传递axis=1或者axis='columns’来从列中删除值:
data.drop(‘two’,axis=1)

drop会修改dataframe的尺寸或形状,该方法直接操作原对象而不返回新对象:
obj.drop(‘c’,inplace=True)

3.索引、选择与过滤

索引
obj[2:4]
obj[[1,3]]
obj[[‘b’,‘a’]]
obj[obj<2]
注意:dataframe切片与python切片不同,是包含尾部的
修改相应部分的值:
obj[‘b’:‘c’]=5

data[data[‘three’]>5]

data<5产生一个布尔dataframe。

3.1 使用loc和iloc选择数据

除了单个标签或者标签列表之外,索引功能还可以用于切片:
data.loc[:‘utah’,‘two’]
data.iloc[:,:3][data.three>5]

4.算数和数据对齐

当你将对象相加时,如果存在某个索引对不相同,则返回结果的索引将是索引对的并集,没有交叠的标签位置上,内部数据对齐会产生缺失值。

4.1 使用填充值的算术方法

当轴标签在一个对象中存在,在另一个对象中不存在时,你想将缺失值填充为0,我们在df1上使用add方法,添加fill_value参数:
df1.add(df2,fill_value=0)

与此相关的一点,当对dataframe重建索引时,你也可以指定一个不同的填充值:
df1.reindex(columns=df2.columns,fill_value=0)

下表是一些灵活算术方法,以r开头的副本方法的参数是翻转的,举例:
1/df1 等价于 df1.rdiv(1)

方法描述
add,radd加法
sub,rsub减法
div,rdiv除法
floordiv,rfloordiv整除
mul,rmul乘法
pow,rpow幂次方

4.2 dataframe和series间的操作

在numpy中,当我们从arr中减去arr[0]时,减法在每一行都进行了操作,这就是所谓的广播机制。
默认情况下,数学操作会将series的索引和dataframe的列进行匹配,并广播到各行:
frame-series

如果一个索引值不在dataframe的列中,也不在series的索引中,则对象会重建索引并形成联合:
frame+series

通常的广播都是在行上进行的,如果你想改为在列上广播,你必须使用算数方法中的一种,如:
frame.sub(series3,axis=‘index’)

5.函数应用和映射

np.abs(frame)

另一个常用的操作是将函数应用到一行或一列的一维数组上,dataframe的apply方法可以实现这个功能:
f=lambda x: x.max()-x.min()
frame.apply(f)
此处的f会被frame的每一列调用一次,结果是一个以frame的列作为索引的series。

如果我传递axis='columns’给apply函数,该函数会被逐行调用:
frame.apply(f,axis=‘columns’)

大部分常用的数组统计都是dateframe的方法,因此apply并不是必须要使用的。

series有map方法,可以将一个逐元素的函数应用到series上:
format= lambda x: ‘%.2f’ % x
frame[‘e’].map(format)
frame.applymap(format)

6.排序和排名

根据某些准则对数据集进行排序是一个重要的内建操作。
obj.sort_index()该方法返回一个根据index排序的对象。

frame.sort_index(axis=1)数据会根据columns进行排序,数据默认会进行升序排序,但是也可以按照降序排序:
frame.sort_index(axis=1,ascending=False)

如果要根据series的值进行排序,使用sort_values方法:
obj.sort_values()
其中默认情况下,所有的缺失值会被排序到series的尾部。

当对dataframe进行排序时,可以使用一列或者多列作为排序键,通过参数by:
frame.sort_values(by=‘b’)
对多列排序时,传递列名的列表:
frame.sort_values(by=[‘a’,‘b’])

rank就是排名,默认情况下,rank通过将平均排名分配到每个组来打破平级关系:
obj.rank()

7.含有重复标签的轴索引

obj.index.is_unique可以判断标签是否唯一。
根据一个标签索引多个条目会返回一个序列,而单个条目会返回标量值。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值