首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

玩转Pandas,让数据处理更easy系列6

01

系列回顾

玩转Pandas系列已经连续推送5篇,尽量贴近Pandas的本质原理,结合工作实践,按照使用Pandas的逻辑步骤,系统地并结合实例推送Pandas的主要常用功能,已经推送的5篇文章:

玩转Pandas,让数据处理更easy系列1

玩转Pandas,让数据处理更easy系列2

玩转Pandas,让数据处理更easy系列3

玩转Pandas,让数据处理更easy系列4

玩转Pandas,让数据处理更easy系列5

实践告诉我们Pandas的主要类DataFrame是一个二维的结合数组和字典的结构,因此对行、列而言,通过标签这个字典的key,获取对应的行、列,而不同于Python, Numpy中只能通过位置找到对应行、列,因此Pandas是更强大的具备可插可删可按照键索引的工具库。

02

Pandas能做什么

Pandas主要能做10件事,现在已经推送了其中大部分,尽管有些点没有深入展开:

  1. 能将Python, Numpy的数据结构灵活地转换为Pandas的DataFrame结构(玩转Pandas,让数据处理更easy系列1; 玩转Pandas,让数据处理更easy系列2)
  2. DataFrame可以方便地实现增加和删除行、列 ( 玩转Pandas,让数据处理更easy系列2)
  3. 智能地带标签的切片,好玩的索引提取大数据集的子集(玩转Pandas,让数据处理更easy系列2 )
  4. 自动数据对齐,完全可以不考虑行、列标签,直接append list.
  5. 灵活地对数据集Reshape和按照不同轴变化数据的Pivot操作。玩转Pandas,让数据处理更easy系列4
  6. 强大的I/O操作。提供接口: CSV and delimited, Excel files, databases, and saving / loading data from the ultrafast HDF5 format.(玩转Pandas,让数据处理更easy系列2)
  7. 通俗易懂地在DataFrame结构上实现merge和join操作(merge操作见:玩转Pandas,让数据处理更easy系列3, concat: 玩转Pandas,让数据处理更easy系列5)
  8. 善于处理missing data,如NaN, non-floating数据(玩转Pandas,让数据处理更easy系列5)
  9. 强大而灵活的分组功能,在数据集上实现分-应用-合的操作,达到整合和改变数据形状的目的。
  10. 时间序列的处理功能,生成 data range,移动的时间窗,时间移动和lagging等。

目前还没谈到的,并且还经常用到的就是9和10了,接下来分别探讨这两个事。

03

Groupby:分-治-合

group by具体来说就是分为3步骤,分-治-合,具体来说:

  1. 分:基于一定标准,splitting数据成为不同组
  2. 治:将函数功能应用在每个独立的组上
  3. 合:收集结果到一个数据结构上

分和合按照字面理解就可,但是“治”又是怎么理解,进一步将治分为3件事:

  1. 聚合操作,比如统计每组的个数,总和,平均值
  2. 转换操作,对每个组进行标准化,依据其他组队个别组的NaN值填充
  3. 过滤操作,忽略一些组,比如个数不够指定大小的

下面详细说下,分,治,这两步操作。合地话就是映射为具体的某个数据结构。

04

分(splitting)

分组就是根据默认的索引映射为不同索引取值的分组名称,来看如下所示的DataFrame实例df_data,可以按照多种方式对它分组,直接调用groupby接口,

df_data.groupby('A')

默认是按照axis=0分组的(行),如果按照列,修改轴,即

df_data.groupby('A' , axis=1)

也可以按照多个列分组,比如:

df_data.groupby([ 'A', 'B'] )

05

选择分组

分组后返回的对象类型为:DataFrameGroupBy,我们看下按照列标签'A'分组后,因为'A'的可能取值为:foo, bar ,所以分为了两组,通过DataFrameGroupBy的get_group可以取得对应的组内行,如下图所示,

agroup = df.groupby('A') agroup.get_group('foo')

同样的方法,看下bar组包括的行:

agroup = df.groupby('A') agroup.get_group('bar')

代码语言:javascript
复制

如果我们想看下每组的第一行,可以调用 first(),可以看到是每个分组的第一个,last()显示每组的最后一个:

agroup.first()

06

治:分组上的操作

对分组上的操作,最直接的是使用aggregate操作,如下,求出每个分组上对应列的总和,大家可以根据上面的分组情况,对应验证:

agroup = df.groupby('A') agroup.aggregate(np.sum)

如果根据两个字段的组合进行分组,如下所示,为对应分组的总和,

abgroup = df.groupby(['A','B']) abgroup.aggregate(np.sum)

查询对应每个分组的个数,返回的是Series实例:

abgroup.size()

如果需要查看,分组foo, one 的个数,如下,得到个数 2.

abgroup.size()['foo']['one']

获得每个分组的统计信息,调用describe接口,如下所示:

abgroup.describe()

一次应用多个函数:

agroup = df.groupby('A') agroup.agg([np.sum, np.mean, np.std])

还可以对不同的列调用不同的函数,详细过程在参考官方文档:

http://pandas.pydata.org/pandas-docs/stable/groupby.html

还可以进行一些转化和过滤操作,这部分也请参考以上目录。

如想下载以上代码,请后台回复: pandas

小编对所推文章分类整理,欢迎后台回复数字,查找感兴趣的文章: 1. 排序算法

2. 图算法(含树)

3. 动态规划

4. LeetCode

5. Python

6. 数据处理三剑客 7. 数学知识

8. 数据预处理

9. 机器学习算法实例大全 10. 深度学习

11. Tensorflow

12. 自然语言处理 13. 上海沙龙

更多文章:

深度学习|大师之作,必是精品

算法channel关键词和文章索引

逻辑回归| 原理解析及代码实现

逻辑回归| 算法兑现为python代码

决策树

对决策树剪枝

举报
领券