目录

2.1pandans数据结构

2.1.1创建Series数据

2.1.2创建DaraFrame属性

2.1.3索引对象

2.2pandas索引操作

2.2.1重新索引

2.2.2更换索引

2.2.3索引和选取

1 不通过函数选取行列

2 选取DataFrame数据的行和列

3 布尔选择

2.2.4操作行和列

1.增加

2.删除

3.修改

2.3pandas数据运算

2.3.1算数运算

2.3.2函数应用和映射

2.3.3排序

2.3.4汇总与统计

2.3.5唯一值和值计数

2.4层次化索引

2.4.1层次化索引简介

2.4.2重排分级顺序

2.4.3统计汇总

2.5pandas可视化

2.5.1线形图

2.5.2柱状图

2.5.3直方图和密度图

2.5.4散点图

2.6综合示例-小费数据集

2.6.1数据分析流程

2.6.2数据来源

2.6.3定义问题

2.6.4数据清洗

2.6.5数据探索


2.1pandans数据结构

pandas又两个基本得数据结构:Series和Dataframe

2.1.1创建Series数据

Series数据结构类似于一维数组,但它是由一组数据(各种Numpy数据类型)和一组 对应得索引组成。通过一组列表数据即可产生最简单得Series数据,如图

Series数据:索引在左边,值在右边。可以看出,如果没有指定一组数据作为索引的话,Series数据会以0到N-1(N为数据的长度)作为索引,也可以通过指定索引的方式来创建Series数据,如图

Series有values和index属性,可返还值数据的数组形式和索引对象,如图

Series与普通的一维数组相比,其具有索引对象,可通过索引来获取Series的单个或一组数值,如图

Series运算都会保留索引和值之间的链接,如图

Series数据中的索引和值一一对应,类似于Python字典数据,所以也可以通过字典数据来创建Series,如图

由于字典结构是无序的,因此返回的Series也是无序的,这里依旧可以通过index指定索引的排列顺序,如图

Series数据和索引都有name属性,这样我们可以给Series定义名称,让Series具有可读性

2.1.2创建DaraFrame属性

DataFrame数据是Python数据分析最常用的数据,无论是创建的数据或外部数据,我们首先想到的都是如何将其转换为DataFrame数据,原因是DataFrame数据为表格型数据。说道表格型数据,多数人想到的可能是Excel表格,本节将会把DataFrame与Excel两种数据进行对比。

在Excel中,在单元格中输入数据即可创建一张表格。对于DataFrame数据而言,需要用代码实现,创建DataFrame数据的办法有很多,最常用的是传入数组、列表、或元祖组成的字典。如图

返回的数据如上图,DataFrame数据有行索引和列索引,行索引类似于Excel表格中每行的编号(没有指定索引的情况下),列索引类似于Excel表格的列名(通常也可称为字段)。

由于字典是无序的,因此可以通过columns指定列索引的排列顺序。如图

当没有指定索引的情况下,会使用0到N-1(N为数据的长度)作为行索引,这里也可以使用其他数据作为索引,如图

使用嵌套字典的数据也可以创建DataFrame数据,如图

下表提供列部分常用的为创建DataFrame数据可传入的数据类型

类型

使用说明

二维ndarray 数据矩阵,可传入行列索引
由数组、列表或元组组成的字典
由Series组成的字典 每个Series为一列,Series索引合并为行索引
嵌套字典
字典或Series列表 各项成为DataFrame一行,字典键或Series索引成为DataFrame列索
由列表或元组组成的列表 ‘’引类似于”二维数组’

如果df为某班级学生的信息,通过设置DataFrame的index和columns的name属性,可以将这些信息显示出来,如图

通过Values属性可以将DataFrame数组转换为二维数组,如图

注:各列数据类型不同,返回的数组会兼顾所有的数据类型

2.1.3索引对象

Series的索引和DataFrame的行和列索引都是索引对象,用于负责管理轴标签和元数据,如图

索引对象是不可以修改的,如果修改就会报错,如图

索引对象类似于数组数据,其功能也类似于一个固定大小的合计,如图

2.2pandas索引操作

本节将针对Series和DataFrame数据,讲解Series和DataFrame索引操作的方法,通过将他们与Excel数据的类比,讲解DataFrame数据的选取与操作。

2.2.1重新索引

前面说过,索引对象是无法进行修改的,本节所说的重新索引并不是给索引重新命名,而是多索引重新排序,如果某个索引值不存在的话,就会引入缺失值,首先来看下Series重新排序后的索引,如图

对于DataFrame数据来说,行和列索引都是可以重新索引的,如图

重新索引列需要使用columns关键字,如图

下表为reindex函数的各参数使用说明

类型 使用说明
index 用于索引的新序列
method 填充缺失值的方法
fill_value 缺失值填充
limit 最大填充量

2.2.2更换索引

在DataFrame数据中,如果不希望使用默认行索引的话,可以在创建的时候通过index参数来 设置行索引。有时候我们希望将列数据作为索引,这时可以通过set_index方法来实现如下图

与set_index方法相反的方法时reset_index

下面说一个实际的例子。对于Excel而言,排序之后,行索引并不会发生变化(依旧是从1开始计数),而对DataFrame数据,排序之后其行索引会改变,如图

这里获取成绩倒数两位同学的数据的话,需要记住其单独的索引。但当数据量大的时候,想查看多维排序过后的数据时,这种做法是很不方便的。我们可以通过恢复索引,对数据进行排序。如下图,原索引可通过drop参数进行删除。

2.2.3索引和选取

在数据分析中,选取需要的数据进行处理和分析是很重要的。在Excel表格中,通过鼠标点选或者扩选可以轻松地选取数据,而在pandas数据中,需要通过索引来完成数据的选取工作。

Series数据的选取较为简单,使用方法类似于Python的列表,这里不仅可以通过0到N-1(N是数据长度)来进行索引,同时也可以通过设置好的索引标签来进行索引。如下图

1 不通过函数选取行列

切片运算与python列表略有不同,如果是利用索引切片,其尾端是被包含的,如下图

DataFrame数据的选取更复杂些,因为它是二维数组,选取列和行都有具体的使用方法。  

通过两个中括号,可以获取多个列的数据,如下图

注:选取列不能用切片,因为切片用于选取行数据

2 选取DataFrame数据的行和列

df_1.loc[[index],[colum]]通过标签选取数据

df_1.iloc[[index],[colum]]通过位置选取数据

3 布尔选择

以df2为例子,筛选出性别为famale的数据,这时就需要用布尔选择来完成。与数组布尔索引类似,既可以使用布尔选择,那么同样也适用于不等号(!=)等逻辑运算符

2.2.4操作行和列

在数据分析中,常用的基本操作为 增删改查,在前面的内容中 查 已经详细讲解过了

1.增加

以df数据为例,该班级转来一个新生,需要在原有数据的基础上增加一行数据。可以通过append函数传入字典结构数据即可,如下图

这些学生都是2018级的,这里我们新建一列用于存放该信息。为一个不存在的列赋值,即可创建一个新列。

如果要新增的列中的数值不一样时,可以传入列表或数组结构数据进行赋值,如图

2.删除

如果王五同学转学列,class字段没有用列,就需要删除其信息。通过drop方法可以删除指定轴上的信息。

3.修改

这里的改指的是行和列标签的修改,通过rename函数,可完成由于某些原因导致的标签录入错误的问题

2.3pandas数据运算

本节将针对Series和DataFrame数据,详细讲解二者的算数运行和函数的应用,这在数据分析中很重要!

2.3.1算数运算

pandas的数据对象在进行算数运算时,如果有相同索引对则进行算数运算,如果没有则会引入缺失值,这就是数据对齐。

对于DataFrame数据而言,对齐操作会同时发生在行和列上,如图

DataFrame和Series数据在进行运算时,先通过Series的索引匹配到相应的DataFrame列索引上,然后沿行向下运算(广播),如图

2.3.2函数应用和映射

在数据分析时,常常会对数据进行较复杂的数据运算,这时需要定义函数。定义好的函数可以应用到pandas数据中,其中有三种方法:map函数,将函数套用在Series的每个元素中,apply函数,将函数套用到DataFrame的行与列上:applymap函数,将函数套用到DataFrame的每个元素上。

如图,需要把price列的“元”字去掉,这时就需要用到map函数,如图

apply使用方法如下

注:lambda为匿名函数,和定义好的函数一样,可以节省代码量

applymap函数可以作用于每个元素,便于对整个DataFrame数据进行批量处理,如图

2.3.3排序

在Series中,通过sort_index函数可对索引进行排序,默认情况为升序,如图

通过sort_values方法可对值进行排序

对于DataFrame数据而言,通过指定轴方向,使用sort_index函数可对行或列索引进行排序(添加参数axis=1/0)。要根据列进行 排序,可以通过sort_values函数,把列名传给by参数即可

2.3.4汇总与统计

在DataFrame数据中,通过sum函数可以对每列进行求和汇总,与Excel中的sum函数类似,如图

指定轴方向,通过sum函数可按行汇总

describe方法可对每个数值型列进行统计,经常用于对数据的初步观察时使用,如图

2.3.5唯一值和值计数

在Series中,通过unique函数可以获取不重复的数组,如图

通过values_counts方法可统计没个值出现的次数,如图

2.4层次化索引

层出化索引时pandas重要的功能之一 ,本节将简单讲解层次化索引的创建过程和使用方法

2.4.1层次化索引简介

简单地说,层次化索引就是轴上有多个级别索引,如下图,为创建一个层次化索引的Series对象

该索引对象为MultiIndex对象,如图

层次化索引的对象,索引和选取操作都很简单,如下图

对于DataFrame数据而言,行和列索引都可以转换为层次化索引

2.4.2重排分级顺序

通过swaplevel方法可以对层次化索引进行重排,如图

2.4.3统计汇总

在层次话索引的pandas数据进行统计汇总时,可以通过level参数指定在某层次上进行汇总统计

这里的运算又点拗口,大家仔细想想就能够理解。

2.5pandas可视化

pandas库中继承了matplotlib中的基础组件,让绘图更加简单。

2.5.1线形图

线形图通常用于描绘两组数据之间的趋势。例如,销售行中月份与销量之间的趋势情况:金融行中股票收盘价与时间序列之间的趋势。

pandas库中的Series和DataFrame中都有绘制各类图标的plot方法,默认情况绘制的是线形图。首先创建一个Series对象

注:%matplotlib inline为魔法函数,使用该函数绘制的图片会直接显示在Notebook中

通过s.plot方法可以绘制线形图,如下图。从图中可以看出,Series的索引作为X轴,值作为Y轴。

通过DataFrame数据的plot方法可以为各列绘制一条线,并会给其创建好图例。首先创建DataFrame数据,如下图

关于pandas绘图的参数,会在实际案例中具体介绍。

2.5.2柱状图

柱状图长绘制各类别之间的关系。例如,班级中男生和女生的分布状况,某零售店个商品的购买数量分布情况。通过绘制pandas绘制柱状图很简单,只需要在plot参数中添加kind=‘bar’,如果类别比较多,可以绘制水平柱状图(kind='bar')

首先,创建一个DataFrame数据的学生信息表格,如果需要分析班级男女比例是否平衡,这时候就可以使用柱状图,通过value_counts计数,获取男女计数的Series数据,进行绘制柱状图

对于DataFrame数据而言,每一行的值都会成为一组,如下图

设置plot函数的stacked参数可以绘制堆积柱状图,如下图

2.5.3直方图和密度图

直方图用于频率分布,y轴可为数值或者比率。直方图在统计分析中是经常使用的,绘制数据的直方图,可以看出其大概分布规律。例如,某班级的身高情况一般是服从正态分布,即高个子和矮个子人较少,大部分都是在平均身高左右。

可通过hist方法绘制直方图

注:通过设置grid参数可在图表中添加网格,bins参数是将值分为多少个段,默认为10

核密度估计(Kernel Density E身体马特,KDE)是对真实密度的估计,其过程是将数据的分布近似为一组核(如正态分布)。通过plot函数的kind=‘kde’可进行绘制,如图

2.5.4散点图

散点图主要用来表现数据之间的规律。例如,身高和体重之间的规律。下面创建一个DataFrame数据,然后绘制散点图

2.6综合示例-小费数据集

本节主要讲解数据分析的基本流程,对小费数据集进行数据的分析与可视化

2.6.1数据分析流程

数据分析流程通常情况下分为5步。

(1)收集数据。在这一步中,需要对收集的数据有一定的认知,对个字段的含义和背景知识都要有着足够的理解。

(2)定义问题。根据各组的行业和业务知识,对数据定义多个待解决的问题。

(3)数据清洗与整理。由于各种问题,获取的数据不够“干净”,需要通过各种手段对数据进行清洗与整理,一边得到准确的分析结果。

(4)数据探索。通过可视化等手段,对数据进行分析和探索,得出结论

(5)数据展示。这部分用于输出,或撰写数据分析报告、或汇报给上级、或绘制PPT。

以上只是基本的数据分析流程,会根据实际情况的不同略有不同。例如,在实际工作中,第(1)步和第(2)步会有所颠倒,首先明确目标,然后再根据目标收集数据:再数据探索方面,也会使用数据挖掘等技术实现更具复杂和有实际操作意义的模型。

2.6.2数据来源

小费数据来源与Python第三方库Seaborn(用于绘图)中自带的数据,加载该数据集(需要先把数据集下载到本地)

注:head函数会返回5条数据,也可指定返回数据行数。

众所周知,在西方国家的服务行业中,顾客会给服务员一些小费。该小费数据为餐饮行业收集的数据。total_bill列为消费总金额,tip为小费金额,sex为顾客性别,smoker为顾客是否抽烟,day为小费的星期,time为聚餐的时间段,size为聚餐人数

2.6.3定义问题

本次分析中,围绕小费数据提出几个问题:小费金额与消费总金额是否存在相关性?性别、是否吸烟、星期几、中/晚餐和小费金额是否有一定的关联?小费金额占消费总金额的百分比是否服从正态分布?

2.6.4数据清洗

首先对数据进行简单描述,看是否有缺失值或者异常值

通过结果可以看出,总共有244条数据,通过统计暂时看不出是否有缺失值。通过打印数据的info信息可以看出每列数据的类型和缺失值,本例中的小费数据集没有任何缺失值如下图

注:本数据集非常的“干净”,数据清洗的内容在后面将会详细讲解。

2.6.5数据探索

首先对小费金额与消费总额进行分析,看看他们之间是否存在关联,通过下面的代码绘制散点图

从图中可以看出,小费金额与消费总金额存在这正相关关系,即消费越高,给的小费越多,这是比较合理的。

我们来看下性别不一样是否会影响小费的金额。这里使用柱状图,通过布尔选择男女,对消费数据进行平均后绘制柱状图,具体操作如下

水平柱状图显示,女性小费金额少于男性小费金额。

注意:这种通过类别汇总的方法比较麻烦,后面讲解了groupby方法会简单许多。

其他字段与小费的关系也是类似的方法。例如,日期与小费的关系,由于观察数据时只看到前5行数据,,通过unique函数看下日期的唯一值有哪些

日期平均小费柱状图如下图,可以看出,周六周日的小费比周四周五的高

最后我们来 分析以下小费百分比的分布状况,这里小费总金额为小费的金额和聚餐所花费的金额,通过DataFrame算数运算,新建一列,用于存储小费百分比

直方图如图所示,可以看出基本符合正态分布,但也有几个异常点。

Python数据分析2-pandas入门和实战相关推荐

  1. Python数据分析之pandas入门

    一.pandas库简介 pandas是一个专门用于数据分析的开源Python库,目前很多使用Python分析数据的专业人员都将pandas作为基础工具来使用.pandas是以Numpy作为基础来设计开 ...

  2. 如何自学python数据分析-『』python数据分析该怎么入门呢?

    用python学数据分析难吗? 数据方向的薪资待遇还是比较高的,而且趋势也比较明显.随着据的落地应用,数据分析将有广泛的发展前景,未来广大的传统行业也将陆续释放出大量的数据分析岗位 通过Python来 ...

  3. 机器人 python 极客入门_机器人Python极客编程入门与实战

    Python是一种面向对象.解释型的计算机程序设计语言,其简洁实用.高效,拥有众多模块库,可移植,跨平台,简单易学,易于上手.随着计算机深入发展,Python逐渐成为最适合青少年做创意设计的语言,也同 ...

  4. 机器人python极客pdf_机器人Python极客编程入门与实战

    编辑推荐 有了先进的软件.硬件开发平台,剩下的只是创意.中国人,特别是中国的年轻人,是全球富有创业.创新精神的一群人,这样的一个群体难道还会缺乏创意吗? "青少年学编程系列丛书"只 ...

  5. python数据分析及特征工程(实战)

    python数据分析及特征工程(实战) 1.数据分析 1.1单属性分析 1.1.1 异常值分析 1.1.2 分布分析 1.1.3 对比分析 1.1.4 结构分析 1.2多属性分析 1.2.1假设检验 ...

  6. python常用命令汇总-python数据分析之pandas常用命令整理

    原标题:python数据分析之pandas常用命令整理 pandas 是基于NumPy 的一种工具,该工具是为了解决数据分析任务而创建的.Pandas 纳入了大量库和一些标准的数据模型 ,提供了高效地 ...

  7. 国内第一本micropython的书出版《机器人Python极客编程入门与实战》

    第一本micropython的书<机器人Python极客编程入门与实战>. 购买地址:https://item.taobao.com/item.htm?spm=2013.1.w4018-1 ...

  8. Python爬虫开发从入门到实战

    Python爬虫开发从入门到实战(微课版) 第1章 绪论 爬虫的主要目的是获取网页内容并解析.只要能达到这个目的,用什么方法都没有问题. 关于获取网页,本书主要介绍了Python的两个第三方模块,一个 ...

  9. 《Python编程:从入门到实战》(第2版)学习笔记 第5章 if语句

    [写在前面]为进一步提高自己的python代码能力,打算把几本经典书籍重新过一遍,形成系统的知识体系,同时适当记录一些学习笔记,我尽量及时更新!先从经典的<Python编程:从入门到实战> ...

  10. python 数据分析day4 Pandas 之 DataFrame

    DataFrame 一. 创建DataFrame 1. 二维数组创建 2. 字典创建 3. JSON创建 4. 读取Excel或CSV文件创建 5. 读数据库(MySQL)创建 二. 常用属性 三. ...

最新文章

  1. 【linux驱动】嵌入式 Linux 对内存的直接读写(devmem)
  2. first dairy----the birth of my blog···
  3. C# 两时间,时间间隔
  4. 基于小程序的Token身份权限体系
  5. dijkstra算法学习
  6. python学习笔记:遍历目录
  7. java xml setdoctype_如何在Java中使用DOM将自定义doctype标记添加到带有xhtml标记的xml中?...
  8. 飞鸽传书扫描器 v1.3
  9. android html拦截广告,广告见鬼去!两招让安卓告别网页广告
  10. 构建dubbo分布式平台-window安装zookeeper注册中心
  11. Coder Essential之编程语言学习知识点纲要
  12. 复盘-对过去的事情做思维演练
  13. DXperience-7.1.1 Sources 源代下载
  14. CTF-密码学-位移密码
  15. nomogram,列线图,因素
  16. 数学建模overleaf模板_数学建模论文怎么写?快来pick最优万能模板,一文格式全搞定!...
  17. java语言,MP3音频文件进行合并功能
  18. mysql数据库表示创建表的关键字的是_创建数据表时,使用( )关键字表示创建临时表。_学小易找答案...
  19. 杜牧“借问酒家何处有,牧童遥指杏花村”杏花村究竟指的是哪里?安徽的池州比较可靠
  20. linux利用su -从普通用户切换root权限

热门文章

  1. Linux系统如何PING地址,Linux下指定源ip进行ping操作的方法
  2. vue+elemnt ul 图片上传隐藏按钮+图片回显
  3. pwn libc找偏移的在线网站
  4. Springboot @Value读取map或list的properties配置
  5. Html网页远程控制电脑,如何从Web浏览器远程控制您的计算机 | MOS86
  6. 从技术到应用实践 揭秘京东区块链布局全景
  7. 微软拼音输入法卸载相关
  8. 1. 人工智能(AI)概述
  9. 【AE软件】视频添加字幕
  10. linux power manager模型