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. 聊聊、Zookeeper Linux 启动

    Zookeeper 在 windows 下安装比较简单,属于无脑式安装,下载下来双击脚本就可以了.前面的文章中也有介绍,今天我来写写 Linux 下的安装,以及所碰到的坑. 首先,登陆 Linux 系 ...

  2. 【spring boot】10.spring boot下的单元测试

    spring boot下的单元测试,思前想后还是需要单独用一章篇幅来看看. 然后在看了介绍和使用时候,我感觉并不想多去看了. 但是还是给后来人留下参考的路径: 官网说明:https://spring. ...

  3. 对ps4 cmask fmask的理解

    这俩都是绑在corlor target上8x8的格子 cmask 做fastclear 这个比较好理解,8x8来表示这个格子是否clear fmask msaa用 provided to suppor ...

  4. [Android实例] Scroll原理-附ScrollView源码分析 (转载)

    想象一下你拿着放大镜贴很近的看一副巨大的清明上河图, 那放大镜里可以看到的内容是很有限的, 而随着放大镜的上下左右移动,就可以看到不同的内容了 android中手机屏幕就相当于这个放大镜, 而看到的内 ...

  5. Windows 2008 R2 Server FTP使用问题

     Windows 2008 R2 Server FTP必须在安装IIS的时候.安装IIS6.0兼职性. 否则建的FTP网站仅仅有关了防火墙才干使用. 原因未知.

  6. Chrome 插件 CrxMouse 去除后门优化版

    说明 CrxMouse 是一款挺不错的 Chrome 插件.仅仅是据说这个插件会在后台偷偷的上传用户的浏览数据,无论上传的内容是不是涉及隐私数据,总让人认为不放心,可是因为插件本身功能还是挺好用的,所 ...

  7. 应用程序之Xib自定义Cell

    效果展示 结构分析 代码实现 一.效果展示 二.结构分析 1⃣️首先我们让我们的控制器不再继承UIViewController,而是继承UITableViewController.这样就直接遵守了de ...

  8. mysql经常使用查询:group by,左连接,子查询,having where

    前几天去了两个比較牛的互联网公司面试.在sql这块都遇到问题了,哎.可惜呀,先把简单的梳理一下 成绩表 score 1.group by 使用 按某一个维度进行分组 比如: 求每一个同学的总分 SEL ...

  9. oracle 表压缩技术

    压缩表是我们维护管理中常常会用到的.以下我们看都oracle给我们提供了哪些压缩方式. 文章摘自"Oracle® Database Administrator's Guide11g Rele ...

  10. git 操作分支

    1. git 查看本地分支:git branch 2. git 查看所有分支:git branch -a 3. git 新建本地分支:git branch branchName 4. git 新建分支 ...