pandas学习笔记5---基本功能之计算与统计

OK,继续学习pandas的基本功能之计算与统计,pandas库的数据结构几乎与excel或数据库的结构完全一样,非常接近我们日常所用的数据形式。同时也是数据分析/挖掘计算的常用基础库,其计算功能的重要性自然不言而喻。

本次我们针对pandas的主要数据结构Series/DataFrame的计算统计功能和方式进行学习,主要包括算术的数据对齐、错误值填充、DataFrame和Series运算、统计方法等。

算术的数据对齐、错误值填充

算术,自然指的是加、减、乘、除,对应的方法为add、sub、mul、div,当然也可以直接进行算术运算比如pd1+pd2,pd1/pd2等等。pandas算法方法的使用方式为pd1.add(pd2)

pandas对象在进行算术运算时会自动对齐索引,即index和columns,相同索引位置的数据才会进行计算。若找不到对应的索引则会产生一个NaN。若不想出现NaN则指定一个错误值填充,即fill_value,当对应索引值不存在时用fill_value的值代替进行计算,在上节重索引部分也提到了这个错误值填充。

frame2=DataFrame(np.arange(12).reshape(4,3),index=list('abcd'))

frame2
Out[181]: 
   0   1   2
a  0   1   2
b  3   4   5
c  6   7   8
d  9  10  11

frame+frame2
Out[182]: 
      0     1     2
a   0.0   2.0   4.0
b   6.0   8.0  10.0
c  12.0  14.0  16.0
d   NaN   NaN   NaN

frame.add(frame2,fill_value=10)
Out[185]: 
      0     1     2
a   0.0   2.0   4.0
b   6.0   8.0  10.0
c  12.0  14.0  16.0
d  19.0  20.0  21.0

DataFrame和Series之间的运算

Series为一列数据结构,DataFrame为两列以上数据结构,我们可以看做为一维数组,和二维数组,那么二者之间的计算方式与一维和二维数据之间必然是通用的,比如广播。当然pandas的数据有索引,故其计算方式在 默认情况下都会根据索引进行广播,通常是Series.index与DataFrame.columns相匹配进行计算,依次向下进行广播。

frame
Out[206]: 
   0  1  2
a  0  1  2
b  3  4  5
c  6  7  8

obj
Out[207]: 
a    4.5
b    7.2
c   -5.3
d    3.6
dtype: float64

frame+obj
Out[208]: 
    0   1   2   a   b   c   d
a NaN NaN NaN NaN NaN NaN NaN
b NaN NaN NaN NaN NaN NaN NaN
c NaN NaN NaN NaN NaN NaN NaN

obj.index=[1,2,3,4]

frame+obj
Out[210]: 
    0     1     2   3   4
a NaN   5.5   9.2 NaN NaN
b NaN   8.5  12.2 NaN NaN
c NaN  11.5  15.2 NaN NaN

如果希望Series.index与DataFram.index想匹配,依次按照列向右广播,那么需要指定axis=0即轴,同时就需要依靠上面所提到的加减乘除方法,即add、sub。。。

obj.index=list('abcd')

obj
Out[212]: 
a    4.5
b    7.2
c   -5.3
d    3.6
dtype: float64

frame.add(obj,axis=0)
Out[213]: 
      0     1     2
a   4.5   5.5   6.5
b  10.2  11.2  12.2
c   0.7   1.7   2.7
d   NaN   NaN   NaN

统计描述

基本的统计描述,即求和、求平均、统计数量、计算最大值、最小值等等,pandas默认统计方法的对象力度是columns,而不是index,若想要实现index粒度,则需要指定axis=1。

describe方法常用来查看数据的基本信息,如数据总量、平均值、最小值、25%中位数等等,针对非数值类型的数据,其统计描述的方法为count、unique、top、freq。

pandas常用的统计方法如下:

附:argmin/argmax方法为Sereis的方法,在未来版本中将会被idxmin、idxmax代替。

obj=Series(np.arange(10))
frame=DataFrame(np.arange(12).reshape(4,3),index=list('abcd'))

obj.sum()
Out[7]: 45

frame.sum()
Out[9]: 
0    18
1    22
2    26
dtype: int64

frame.sum(axis=1)
Out[10]: 
a     3
b    12
c    21
d    30
dtype: int64

obj3=Series(list('aadc'))

obj3.describe()
Out[23]: 
count     4
unique    3
top       a
freq      2
dtype: object

除了以上几点外,pandas还提供了唯一值、值计数、以及成员资格等方法。

唯一值:unique方法,可以得到Series中的唯一值元素数组,按元素顺序返回,DataFrame无此方法

值计数:value_counts方法,可以统计Sereis中元素出现的次数,其结果索引为元素的唯一值,其值是元素的频率,此方式也可用于数组或列表,DataFrame无此方法。

成员资格:isin方法,用来判断元素是否在数据中,返回的对象为一组布尔值,适用于Sereis和DataFrame

apply:此方法针对于DataFrame,类似于map函数的用法,即将一个方法应用于DataFrame内的元素,可通知axis来指定行或者列



obj
Out[68]: 
a    1
b    1
c    2
d    3
e    4
f    5
dtype: int32

obj.unique()
Out[55]: array([1, 2, 3, 4, 5], dtype=int64)

obj.isin([1,2])
Out[69]: 
a     True
b     True
c     True
d    False
e    False
f    False
dtype: bool

f=lambda x:x.max()-x.min()

frame.apply(f)
Out[83]: 
1    4
2    8
3    8
4    8
dtype: int64

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值