pandas对象拥有一组常用的数学和统计方法,大部分都属于约简和汇总统计,用于从Series中提取单个的值,或者从DataFrame中的行或列中提取一个Series。相比Numpy而言,Numpy都是基于没有缺失数据的假设而构建的。

来看一个简单的例子

In [6]: df=DataFrame([[1.4,np.nan],[7,-4],[np.nan,np.nan],[0.75,-1.3]],index=['a

...: ','b','c','d'],columns=['one','two'])

在df中,有些行的数据是空的,没有实际意义

In [7]: df

Out[7]:

one  two

a  1.40  NaN

b  7.00 -4.0

c   NaN  NaN

d  0.75 -1.3

但是在用sum计算的时候依然能够计算出每一列的值

In [8]: df.sum()

Out[8]:

one    9.15

two   -5.30

dtype: float64

传入axis=1会按照行的方式进行计算

In [9]: df.sum(axis=1)

Out[9]:

a    1.40

b    3.00

c    0.00

d   -0.55

dtype: float64

约简方法的选项:

间接统计(比如达到最小值和最大值的索引)

In [10]: df.idxmax()

Out[10]:

one    b

two    d

dtype: object

In [11]: df.max()

Out[11]:

one    7.0

two   -1.3

dtype: float64

累加型:

In [12]: df.cumsum()

Out[12]:

one  two

a  1.40  NaN

b  8.40 -4.0

c   NaN  NaN

d  9.15 -5.3

还有一种比较强大的方法describe用于一次性产生多个汇总统计。其中mean为平均值,std为标准差

In [13]: df.describe()

Out[13]:

one       two

count  3.000000  2.000000

mean   3.050000 -2.650000

std    3.436204  1.909188

min    0.750000 -4.000000

25%    1.075000 -3.325000

50%    1.400000 -2.650000

75%    4.200000 -1.975000

max    7.000000 -1.300000

描述和汇总的方法:

唯一值,值计数以及成员资格

还有一类方法可以从一维Series的值中抽取信息。以下面这个Series为例

In [15]: obj=Series(['c','a','d','a','a','b','d','c','c'])

In [16]: uni=obj.unique()

In [17]: uni

Out[17]: array(['c', 'a', 'd', 'b'], dtype=object)

返回的结果是未排序的,如果需要排序的话可以对uni采用sort的方法。

In [18]: uni.sort()

In [19]: uni

Out[19]: array(['a', 'b', 'c', 'd'], dtype=object)

value_counts统计Serises中各值出现的概率

In [21]: obj.value_counts()

Out[21]:

c    3

a    3

d    2

b    1

dtype: int64

同样的得到的结果也是未排序的,如果要排序的话按照下面的方法进行

In [22]: pd.value_counts(obj.values,sort=False)

Out[22]:

a    3

c    3

b    1

d    2

dtype: int64

那么这些功能也是可以针对DataFrame使用的,使用方法如下

In [23]: data=DataFrame({'qu1':[1,3,4,3,4],'qu2':[2,3,1,2,3],'qu3':[1,5,2,4,4]})

...:

In [24]: data

Out[24]:

qu1  qu2  qu3

0    1    2    1

1    3    3    5

2    4    1    2

3    3    2    4

4    4    3    4

将pandas的value_counts传给该DataFrame的apply函数。

In [25]: result=data.apply(pd.value_counts).fillna(0)

得到的是

In [26]: result

Out[26]:

qu1  qu2  qu3

1  1.0  1.0  1.0

2  0.0  2.0  1.0

3  2.0  2.0  0.0

4  2.0  0.0  2.0

5  0.0  0.0  1.0

处理缺失数据

pandas使用浮点值NaN表示浮点和非浮点数组中的缺失数据。NA的处理方法如下:

In [27]: data=Series(['abc','antick',np.nan,'avocado'])

In [28]: data.isnull()

Out[28]:

0    False

1    False

2     True

3    False

dtype: bool

In [29]: data.fillna('zero')

Out[29]:

0        abc

1     antick

2       zero

3    avocado

dtype: object

In [30]: data.notnull()

Out[30]:

0     True

1     True

2    False

3     True

dtype: bool

丢弃全为空的数据

In [31]: data.dropna()

Out[31]:

0        abc

1     antick

3    avocado

dtype: object

但在DataFrame中,如果直接采用dropna的话将会默认丢弃任何含有缺省值的行。

In [32]: data=DataFrame([[1,6.5,3],[1,None,None],[None,None,None],[None,6.4,3]])

...:

In [33]: data

Out[33]:

0    1    2

0  1.0  6.5  3.0

1  1.0  NaN  NaN

2  NaN  NaN  NaN

3  NaN  6.4  3.0

In [34]: clean=data.dropna()

In [35]: clean

Out[35]:

0    1    2

0  1.0  6.5  3.0

传入how=’all’将只丢弃全为NA的那些行

In [36]: clean=data.dropna(how='all')

In [37]: clean

Out[37]:

0    1    2

0  1.0  6.5  3.0

1  1.0  NaN  NaN

3  NaN  6.4  3.0

加入axis=1将会丢弃全为None的列

In [38]: clean=data.dropna(axis=1,how='all')

In [39]: clean

Out[39]:

0    1    2

0  1.0  6.5  3.0

1  1.0  NaN  NaN

2  NaN  NaN  NaN

3  NaN  6.4  3.0

填充缺失数据

有些时候其实并不想要丢弃为空的数据,只是想换个显示名称或者通过其他方式来填补这些空洞。这个方法在前面其实也用过就是fillna

In [40]: data.fillna(0)

Out[40]:

0    1    2

0  1.0  6.5  3.0

1  1.0  0.0  0.0

2  0.0  0.0  0.0

3  0.0  6.4  3.0

如果想差异化的填充,比如第一列的空数据填充0,第二列的空数据填充-1.fillna也是有方法的。传入一个字典即可

In [41]: data

Out[41]:

0    1    2

0  1.0  6.5  3.0

1  1.0  NaN  NaN

2  NaN  NaN  NaN

3  NaN  6.4  3.0

字典的键值就代表列的索引,下面这个就是将第一列的空值填充为0,第二列的空值填充为-1

In [42]: data.fillna({1:0,2:-1})

Out[42]:

0    1    2

0  1.0  6.5  3.0

1  1.0  0.0 -1.0

2  NaN  0.0 -1.0

3  NaN  6.4  3.0

再看下前向插值和后向插值。method=ffill是前向插值,也就是根据空值的前面的值进行插入

In [43]: data.fillna(method='ffill')

Out[43]:

0    1    2

0  1.0  6.5  3.0

1  1.0  6.5  3.0

2  1.0  6.5  3.0

3  1.0  6.4  3.0

method=backfill为后向插值,也就是根据空值后面的值进行插入

In [44]: data.fillna(method='backfill')

Out[44]:

0    1    2

0  1.0  6.5  3.0

1  1.0  6.4  3.0

2  NaN  6.4  3.0

3  NaN  6.4  3.0

fillna函数的参数

层次化索引

层次化索引是pandas的一个很重要的功能。它能使你在一个轴上拥有多个索引级别,也就是以低维度形式处理高维度的数据

In [50]: data=Series(np.random.randn(10),index=[['a','a','a','b','b','b','c','c'

...: ,'d','d',],[1,2,3,1,2,3,1,2,1,2]])

In [51]: data

Out[51]:

a  1    1.085711

2    0.018760

3   -0.357718

b  1    1.147850

2   -0.065931

3   -0.012061

c  1   -0.736660

2   -1.483384

d  1   -0.403322

2   -0.309897

dtype: float64

In [52]: data.index

Out[52]:

MultiIndex(levels=[[u'a', u'b', u'c', u'd'], [1, 2, 3]],

labels=[[0, 0, 0, 1, 1, 1, 2, 2, 3, 3], [0, 1, 2, 0, 1, 2, 0, 1, 0, 1]])

在上面的这个例子中,a,b,c,d可以看做是外层索引。双层索引的使用

In [53]: data['a']

Out[53]:

1    1.085711

2    0.018760

3   -0.357718

dtype: float64

In [54]: data['a'][1]

Out[54]: 1.0857109651061458

In [55]: data['a'][2]

Out[55]: 0.018760105407126977

还可以在内层中提取数据

In [58]: data[:,2]

Out[58]:

a    0.018760

b   -0.065931

c   -1.483384

d   -0.309897

dtype: float64

In [67]: data['a':'b']

Out[67]:

a  1    1.085711

2    0.018760

3   -0.357718

b  1    1.147850

2   -0.065931

3   -0.012061

dtype: float64

In [68]: data['a':'b'][2]

Out[68]: -0.3577177301843591

同样的对于DataFrame也可以进行类似的分层

In [69]: frame=DataFrame(np.arange(12).reshape((4,3)),index=[['a','a','b','b'],[

...: 1,2,1,2]],columns=[['chengdu','chongqing','beijing'],['Green','Red','Gr

...: een']])

In [70]: frame

Out[70]:

chengdu chongqing beijing

Green       Red   Green

a 1       0         1       2

2       3         4       5

b 1       6         7       8

2       9        10      11

索引方式如下:

In [73]: frame['chengdu']

Out[73]:

Green

a 1      0

2      3

b 1      6

2      9

In [74]: frame['chengdu']['Green']

Out[74]:

a  1    0

2    3

b  1    6

2    9

Name: Green, dtype: int64

In [75]: frame['chengdu']['Green']['a']

Out[75]:

1    0

2    3

还可以给各层进行命名

In [79]: frame.index.names=['key1','key2']

In [80]: frame.columns.names=['city','color']

In [81]: frame

Out[81]:

city      chengdu chongqing beijing

color       Green       Red   Green

key1 key2

a    1          0         1       2

2          3         4       5

b    1          6         7       8

2          9        10      11

根据级别汇总统计

我们可以根据行或列上的级别来进行求和

对key2的列相同的值进行求和计算

In [82]: frame.sum(level='key2')

Out[82]:

city  chengdu chongqing beijing

color   Green       Red   Green

key2

1           6         8      10

2          12        14      16

也就是a的key2列等于1的值和b的key2列等于1的值求和。a的key2列等于2的值和b的key2列等于2的值求和

如果要针对a和b分别求助,则采用level=key1的方式

In [83]: frame.sum(level='key1')

Out[83]:

city  chengdu chongqing beijing

color   Green       Red   Green

key1

a           3         5       7

b          15        17      19

对color相同的进行行求和。

In [87]: frame.sum(level='color',axis=1)

Out[87]:

color      Green  Red

key1 key2

a    1         2    1

2         8    4

b    1        14    7

2        20   10

python数据分析之Pandas:汇总和计算描述统计的更多相关文章

  1. pandas汇总和计算描述统计

    pandas 对象拥有一组常用的数学和统计方法. 他们大部分都属于简约和汇总统计, 用于从Series中提取单个值(如sum或mean) 或从DataFrame的行或列中提取一个Series.跟对应的 ...

  2. 【学习】数据处理基础知识(汇总和计算描述统计)【pandas】

    pd对象拥有一组常用的数学和统计方法.大部分都属于约简和汇总统计,用于从Series中单个值,如sum 和 mean 或从DF的行或列中提取一个Series. 1. 描述和汇总统计方法 #汇总和计算描 ...

  3. Python数据分析库pandas基本操作

    Python数据分析库pandas基本操作2017年02月20日 17:09:06 birdlove1987 阅读数:22631 标签: python 数据分析 pandas 更多 个人分类: Pyt ...

  4. Python数据分析之pandas基本数据结构:Series、DataFrame

    1引言 本文总结Pandas中两种常用的数据类型: (1)Series是一种一维的带标签数组对象. (2)DataFrame,二维,Series容器 2 Series数组 2.1 Series数组构成 ...

  5. Python 数据分析:Pandas 缺省值的判断

    Python 数据分析:Pandas 缺省值的判断 背景 我们从数据库中取出数据存入 Pandas None 转换成 NaN 或 NaT.但是,我们将 Pandas 数据写入数据库时又需要转换成 No ...

  6. Python数据分析之pandas学习

    Python中的pandas模块进行数据分析. 接下来pandas介绍中将学习到如下8块内容:1.数据结构简介:DataFrame和Series2.数据索引index3.利用pandas查询数据4.利 ...

  7. Python数据分析之pandas

    Python中的pandas模块进行数据分析. 接下来pandas介绍中将学习到如下8块内容:1.数据结构简介:DataFrame和Series2.数据索引index3.利用pandas查询数据4.利 ...

  8. Python数据分析之Pandas操作大全

    从头到尾都是手码的,文中的所有示例也都是在Pycharm中运行过的,自己整理笔记的最大好处在于可以按照自己的思路来构建矿建,等到将来在需要的时候能够以最快的速度看懂并应用=_= 注:为方便表述,本章设 ...

  9. python数据分析之pandas数据选取:df[] df.loc[] df.iloc[] df.ix[] df.at[] df.iat[]

    1 引言 Pandas是作为Python数据分析著名的工具包,提供了多种数据选取的方法,方便实用.本文主要介绍Pandas的几种数据选取的方法. Pandas中,数据主要保存为Dataframe和Se ...

随机推荐

  1. saltstack安装+基本命令

    环境: node1:172.16.1.60 OS:centos 7.3 master hostname:centos7u3-1 node2:172.16.1.61 OS:centos 7.3 mini ...

  2. REMOTE HOST IDENTIFICATION HAS CHANGED 问题解决

    今天处理 ssh连接至 ubuntu 服务器时,提示以下错误: @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ WARNING ...

  3. jsp中jquery用法一步刷新 验证用户名是否存在

    <script type="text/javascript"> /* $(document).ready(function(){ var id="ha&quo ...

  4. 公司的mysql-installer-community-5.7.19.0安装注意

    需要安装Microsoft Visual C++ 2013 Redistributable(x64) 和 Microsoft Visual C++ 2013 Redistributable(x86) ...

  5. google 搜索结果在新标签页打开

    google->setting->search setting->Where results open->勾选

  6. robotframework使用之元素定位动态ID方法

    转自: http://blog.csdn.net/u011757108/article/details/53418671 一个弹出框所有元素ID竟然的动态的,关闭后再打开,里面的ID又变! 如下图:  ...

  7. css hover对其包括的元素进行样式设置

    <ul class="icon-down-single-arr-li"> <li> <a href="javascript:void(0)& ...

  8. StringBuilder作用

    String 类型和 StringBuffer 类型的主要性能区别其实在于 String 是不可变的对象因此在每次对 String 类型进行改变的时候其实都等同于生成了一个新的 String 对象,然 ...

  9. windows下使用Eclipse编译执行MapReduce程序 Hadoop2.6.0/Ubuntu

    一.环境介绍 宿主机:windows8 虚拟机:Ubuntu14.04 hadoop2.6伪分布:搭建教程http://blog.csdn.net/gamer_gyt/article/details/ ...

  10. PX4学习之-uORB简单体验

    一.前言 最近项目使用到 CPU2 与 CPU0 之间的通信, 使用定时器传递消息到 CPU0 后, CPU0 需要将消息分发到不同的应用程序里面. PX4 里面使用的是 uORB 多线程/进程通信机 ...