前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >玩转Pandas,让数据处理更easy系列4

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

作者头像
double
发布2018-07-25 18:07:40
1.1K0
发布2018-07-25 18:07:40
举报
文章被收录于专栏:算法channel算法channel

01

系列回顾

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

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

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

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

以上3篇总结了Pandas主要的两个数据结构:Series(一维)和DataFrame(二维),系统地介绍了创建,索引,增删改查Series, DataFrame等常用操作接口,总结了Series如何装载到DataFrame中,以及一个实际应用多个DataFrame的实战项目例子。

值得推荐的是,Pandas广泛应用在金融,统计,社会科学,和许多工程领域。Pandas和R语言直接无缝衔接。Pandas是基于Numpy(Numpy基于Python)基础开发,因此能和带有第三方库的科学计算环境很好地进行集成。

02

Pandas核心应用场景

按照使用逻辑,盘点Pandas的主要可以做的事情:

  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操作。
  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)
  8. 善于处理missing data,如NaN, non-floating数据。
  9. 强大而灵活的分组功能,在数据集上实现分-应用-合的操作,达到整合和改变数据形状的目的。
  10. 时间序列的处理功能,生成 data range,移动的时间窗,时间移动和lagging等。

接下来,按照以上未涉及的思路陆续推送,欢迎补充和指正。

03

多Index层级结构

Pandas中什么是有层次的数据呢? 简单来说,就是构造了一个有层次的Index实例,其他没什么不同。首先构造一个有层次的Index,如下:

#创建有层次的Index实例 index_name =['first','second'] lay_index = [['bar', 'bar', 'baz', 'baz', 'foo', 'foo', 'qux', 'qux'], ['one', 'two', 'one', 'two', 'one', 'two', 'one', 'two']] tuples = list(zip(*lay_index)) two_layers_index = pd.MultiIndex.from_tuples(tuples, names=index_name) two_layers_index

有了Index实例,充填一个8行2列的数据values就行,如下所示:

res = np.array([list(np.random.randn(8)),list(np.random.randn(8))]).T # 8行2列 pd_h = pd.DataFrame(res, index=two_layers_index, columns = ['A','B']) pd_h

得到数据如下,A, B 是列标签,first, second是Index实例的标签名称。

这块功能在实际使用中,暂时不常用,先不展开总结。

04

转化操作

拿到一个数据表后,有时需要改变数据表的形状,此时就要用到这块功能: reshaping, pivot, transpose, sort等功能。

4.1 pivot

pivot是指按照指定的Index和columns,values旋转原来的数据表。

#pivot df = pd.DataFrame({ 'foo': ['one','one','one','two','two','two'], 'bar': ['A', 'B', 'C', 'A', 'B', 'C'], 'baz': [1, 2, 3, 4, 5, 6]}) df

数据显示如下,可以看到数据的index是默认的从0开始的整数索引,columns是[bar,baz,foo],

ok,现在我想作如下转化,index设置为foo, columns设置为bar, values设置为baz列,

df.pivot(index='foo', columns='bar',values='baz')

转化后的结果如下显示:

此时这种转化,用肉眼观察,是比较合理的,但是有时候为了观察多个维度,我们可能需要大量的转化实验,比如,这样设置行、列、值

df.pivot(index='bar', columns='baz', values='foo')

得到的结果如下,看出这种转化出现比较多的None值,因为这种数据轴的设置导致的,但这是正常操作。

4.2 sort

Pandas的排序操作提供了2个主要的API,分别按照值排序和索引排序。值排序的接口:

DataFrame.sort_values(by, axis=0, ascending=True, inplace=False, kind='quicksort', na_position='last')

例子总结里面所有可能的排序细节问题,首先构造一个DataFrame实例,如下所示:

df = pd.DataFrame({'col1' : ['A', 'A', 'B', np.nan, 'D', 'C'], 'col2' : [2, 1, 9, 7, 7, 4], 'col3': [0, 1,np.nan,np.nan, 2, 3]}) df

按照col1和col3这两列的值排序结果如下:

sort_1_3 = df.sort_values(by=['col1', 'col3']) sort_1_3

排序后的结果如下所示:

  1. 默认情况下,排序中等于NaN的值相应地位于后面,如果设置na_position='first',才会将NaN值位于前面;
  2. 排序默认不是就地排序,inplace=False;
  3. 多列排序中,第一个参数是主排序字段,第二个参数是次排序字段,也就是说如果第一个主排序字段出现重复后,按照第二个字段排序,依此类推。

以上总结了DataFrame主要能做的事情,初步了解多层 Index是怎么回事,以及Pivot,Sort等操作接口。欢迎指正。

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

更多文章:

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

算法channel关键词和文章索引

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

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

决策树

对决策树剪枝

sklearn分类和回归

提炼出分类器算法

贝叶斯分类

朴素贝叶斯分类器:例子解释

朴素贝叶斯分类:拉普拉斯修正

单词拼写纠正器python实现

半朴素贝叶斯分类器

支持向量机参数求解

支持向量机之软间隔和核函数

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2018-03-26,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 程序员郭震zhenguo 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档