前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >统计师的Python日记【第4天:欢迎光临Pandas】

统计师的Python日记【第4天:欢迎光临Pandas】

作者头像
数说君
发布2018-04-04 16:14:48
9610
发布2018-04-04 16:14:48
举报
文章被收录于专栏:数说工作室数说工作室

本文是【统计师的Python日记】第4天的日记

回顾一下:

第1天学习了Python的基本页面、操作,以及几种主要的容器类型;

第2天学习了python的函数、循环和条件、类。

第3天了解了Numpy这个工具库。

原文复习(点击查看):

  1. 第1天:谁来给我讲讲Python?
  2. 第2天:再接着介绍一下Python呗
  3. 【第3天:Numpy你好】

今天将带来第4天的学习日记。

目录如下:

前言

一、Series

二、Dataframe

1. 数据结构

2. 基本操作

(1)改变索引名

(2)增加一列

(3)排序

(4)删除一列


统计师的Python日记【第4天:欢迎光临Pandas】

前言

第3天我发了一个愿,学Python我的计划是:

Numpy → Pandas → 掌握一些数据清洗、规整、合并等功能 → 掌握类似与SQL的聚合等数据管理功能 → 能够用Python进行统计建模、假设检验等分析技能 → 能用Python打印出100元钱 → 能用Python帮我洗衣服、做饭 → 能用Python给我生小猴子......

我不是一名程序员,不写网站(以后可能会爬一爬网站的数据)、不搞支付系统、不处理多媒体、也不想当黑客,学Python主要目的就是玩数据、做分析,c成为一名进阶的统计师,以后可能的话搞一搞大数据。

在这样的角色设定之下,Pandas就一定要学好!Pandas被称为“Python Data Analysis Li”,它:

  • 是基于Numpy的一种工具库;
  • 提供了大量能使我们快速便捷处理数据的函数和方法;
  • 最初被作为金融数据分析根据被开发出来;
  • 集成了时间序列功能;
  • 对缺失值的灵活处理能力;
  • ......

Pandas有两种主要的数据结构:Series和Dataframe,前者是一维的,后者是多维的(表格型)。

一、Series

Series由一组数据和对应的索引组成,看个例子:

>>> a=pd.Series([7,6,5,4]) >>> a 0 7 1 6 2 5 3 4 dtype: int64

我们也可以用index=来指定索引:

>>> a=pd.Series([7,6,5], index=['shu','shuo','jun']) >>> a shu 7 shuo 6 jun 5 dtype: int64

“艾玛,这不有点像第1天学的字典吗?”我心想。

打开第一天的日记复习一下吧→【第1天:谁来给我讲讲Python?】

在操作上也像字典,对比一下a(字典)和b(Series):

>>> a=dict(name='jiayounet', age='27') >>> a {'age': '27', 'name': 'jiayounet'} >>> a['age'] '27' >>> 'age' in a True >>> 'haha' in a False >>> b=pd.Series([7,6,5], index=['shu','shuo','jun']) >>> b shu 7 shuo 6 jun 5 dtype: int64 >>> b['shu'] 7 >>> 'shu' in b True >>> 'haha' in b False

实际上,字典也确实可以直接变身成为Series!比如下面的字典a,储存了每个地区的平均工资,将其变为Series:

>>> a=dic{'Beijing':7000, 'Shanghai':8000, 'Shenzhen':7700, 'Nanjing':4700} >>> a {'Beijing': 7000, 'Shanghai': 8000, 'Nanjing': 4700, 'Shenzhen': 7700} >>> pd.Series(a) Beijing 7000 Nanjing 4700 Shanghai 8000 Shenzhen 7700 dtype: int64

也可以指定索引:

>>> pd.Series(a, index=['Beijing', 'Shanghai']) Beijing 7000 Shanghai 8000 dtype: int64

二、DataFrame

1. 数据结构

DataFrame是一个表格型的数据结构。

下面的这组数据,储存了2015年中国人口前十的城市,以及它们拥有的人口

非常清爽的一张表,它~就~是~DataFrame!

上面是在ipython notebook中(一个嵌入在浏览器中的shell!)显示的,如果在Python自带的shell中,显示出来是这样的:

也不差啊!

那么怎么才能生成这样一张表呢?最常用的方法,是用字典生成:

>>> pop={'city':['Chongqin', 'Shanghai', 'Beijing', 'Chengdu', 'Tianjin', 'Guangzhou', 'Baoding', 'Harbin', 'Suzhou', 'Shenzhen'], 'pop':[2884.6, 2301.9, 1961.2, 1404.8, 1293.8, 1270.1, 1119.4, 1063.6, 1046.6, 1035.8]} >>> pop {'city': ['Chongqin', 'Shanghai', 'Beijing', 'Chengdu', 'Tianjin', 'Guangzhou', 'Baoding', 'Harbin', 'Suzhou', 'Shenzhen'], 'pop': [2884.6, 2301.9, 1961.2, 1404.8, 1293.8, 1270.1, 1119.4, 1063.6, 1046.6, 1035.8]} >>> pop_DF=pd.DataFrame(pop) >>> pop_DF city pop 0 Chongqin 2884.6 1 Shanghai 2301.9 2 Beijing 1961.2 3 Chengdu 1404.8 4 Tianjin 1293.8 5 Guangzhou 1270.1 6 Baoding 1119.4 7 Harbin 1063.6 8 Suzhou 1046.6 9 Shenzhen 1035.8

也可以用columns=[]来指定某列:

>>> pop_DF=pd.DataFrame(pop, columns=['city']) >>> pop_DF city 0 Chongqin 1 Shanghai 2 Beijing 3 Chengdu 4 Tianjin 5 Guangzhou 6 Baoding 7 Harbin 8 Suzhou 9 Shenzhen

2. 基本操作

认识几个基本操作,加深一下印象。

(1)改变索引名

刚刚的城市人口数据,我们有10个城市,索引是0~9,我们不想用这么单调的数字来做索引,想用每个城市的简称来表示,和Series一样,可以用index=来指定索引:

(因为Python自带的shell中,结果的显示没有ipython notebook美观,所以下面的例子我用ipython notebook的结果来展示)

注:语句为

pop_DF=DataFrame(pop, index=['Yu', 'Hu', 'Jing', 'Rong', 'Jin', 'Sui', 'Bao', 'Ha', 'Su', 'Shen'])

(2)增加一列

如何给DataFrame增加一列?还是以刚刚城市人口的数据pop_DF为例,我们来增加一列,给每个城市打上“China”的标记:

有时候增加的这一列不一定全,可能有缺失,比如再给每个城市增加一列归属省份,但是本人地理差,只知道广州属于广东,苏州属于江苏,那么我可以这么加:

这里我get了两点:

1. 可以用Series来按照索引的匹配来增加一列;

2. 缺失的地方会用NaN来表示。

(3)排序

作为统计师,排序是常见的,我想到的以后可能用到的至少有这几种:

人为给定顺序;

按照索引来自动排序:升序、降序;

按照某一变量来自动排序;

好吧,一个一个来学:

  • 人为给定顺序:

用reindex函数,可以人为的给定顺序,想让谁在前面谁就在前面。

比如,我们按照首字母来人为给定如下顺序

注:语句为

pop_DF2=pop_DF.reindex(['Bao', 'Ha', 'Hu', 'Jin', 'Jing', 'Rong', 'Shen', 'Su', 'Sui', 'Yu'])

这时我有一个问题了:要是reindex中出现了不存在的索引怎么办?

比如上例中pop_DF2的“Chu”,结果全面变量都是缺失的。

  • 按照索引自动排序:

可以用 .sort_index() 来让数据按照索引自动排序。

在上例中,我们多了一个索引为“Chu”的空数据,并且在Bao的前面,我们再用sort_index()让它按照字母顺序自动重排一下。

这是默认的升序排列,也可以降序,只要指定ascending=False就可以:

pop_DF2.sort_index(ascending=False)

  • 按照变量自动排序:

我们可以用 .sort_values( by = '' ) 来指定某一个变量来排序:

我们回到pop_DF这个数据:

让它按照pop来排序:

(4)删除一列

前面学的是改变索引名、增加一列、各种排序,好像少掉了什么——如何删掉一列和一行...

.drop() 就可以删掉指定的索引,比如我们想删掉pop_DF中,人口大于2000(万)的城市,也就是重庆和上海,对于的索引(也就是简称)为:Yu和Hu

那么删掉一列呢?

也是用 .drop() ,指定一下要删的列变量,并且加一句 axis=1

今天的学习结束!

Series、DataFrame、玩索引、各种增、各种删、各种排序......今天学的很过瘾,学完这些,我想我真正算得上——入门Pandas啦!

哎呦,第5天再见~

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

本文分享自 数说工作室 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
容器服务
腾讯云容器服务(Tencent Kubernetes Engine, TKE)基于原生 kubernetes 提供以容器为核心的、高度可扩展的高性能容器管理服务,覆盖 Serverless、边缘计算、分布式云等多种业务部署场景,业内首创单个集群兼容多种计算节点的容器资源管理模式。同时产品作为云原生 Finops 领先布道者,主导开源项目Crane,全面助力客户实现资源优化、成本控制。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档