手把手教你学Python之Pandas(一文掌握数据分析与处理库-Pandas)
目录
基本结构之Series
Series对象的创建
Index对象介绍
Series中数据的访问
Series中常用方法
基本结构之DataFrame
DataFrame的创建
DataFrame中数据访问
DataFrame 常见属性
DataFrame 常见方法
DataFrame的合并操作
Pandas中常用方法
加载数据的方法
数据显示的方法及关键属性
缺失值处理方法
Pandas中的分组操作
Pandas中的数据合并操作
Pandas 是一种基于 NumPy 的开源的数据分析和处理工具包,提供了高性能、简单易用的数据结构和数据分析函数。Pandas提供了方便的类表格和类SQL的操作,同时提供了强大的缺失值处理方法,通过Pandas可以方便的进行数据导入、选取、清洗、处理、合并、统计分析等操作。
Python标准库中默认不包含 Pandas,需要自己下载安装:
命令行安装 pip install pandas;
借助于第三方包管理软件,例如Anaconda;
基本结构之Series
Pandas 中的 Series 对象可以理解为带有标签数据的一维数组,标签在Pandas中有对应的数据类型“Index”,Series类似于一维数组与字典的结合。
Series对象的创建
创建Series时,可通过index参数指定索引,未指定索引时,采用默认索引,从0开始,不断递增;创建Series的主要方式如下:
通过列表、元组创建:索引大小必须和列表大小一致;
通过numpy的ndarray创建:必须是一维数组,且数组大小和索引大小要一致;
通过字典创建:默认索引为字典的关键字,指定索引时,会以索引为键获取值,没有值时,默认为NaN;
通过标量创建 :重复填充标量到每个索引上;
创建好Series对象后,可通过values 属性获取具体值,类型为一维ndarray;可通过index属性获取相应索引,类型为Index;
Index对象介绍
Pandas 的 Index 对象可以看作是一个不可变数组,Index 对象中可以包含重复值。可直接通过Pandas中的Index类创建Index对象,也可以通过Series或DataFrame中的 index属性获取对应的Index对象。Index对象可以在多个数据间共享。例如:
Index对象的很多操作都与numpy 中的数组类似,例如支持索引和切片操作,支持Numpy中的一些常见函数,拥有size,shape,ndim 等属性。不同的是Index 对象的值是不可变的。Index 对象的不可变特征使得多个数据之间进行索引共享时更加安全,可避免因修改索引时而导致的副作用。
Index对象也支持集合操作,例如如并集、 交集、 差集等,这些操作也可以通过调用对象方法来实现。不同的是操作结果中可能会存在重复的元素。
Series中数据的访问
Series 对象与 numpy 中的一维数组 和 字典 dict在很多方面都类似。Series 对象中数据访问可与它们进行类比学习。
(1)将Series看作字典
字典中的键不允许重复,但Series中的索引允许有重复值;
以索引为键,可访问对应的值,如果有多个,则结果为Series类型;
可调用字典的一些常见方法,如keys()、items()等,可判断是否包含指定索引;
可用字典类似语法更新数据,对已有的索引进行赋值,会修改索引对应的值,对一个不存在的索引进行赋值,会添加一个索引。
系统一般会为Series对象默认分配一个从0开始不断增大的索引,称为隐式索引;用户通过index指定的索引称为显式索引。如果显式索引为整数,容易冲突,通过键访问采用的是显式索引,通过切片访问采用的是隐式索引,尽量不要使用整数作为显式索引。其他情况下,两种方式可以共存。
(2)将Series看作一维数组
可以通过索引、切片、布尔表达式访问数据;
通过切片访问时,显式索引结果包含最后一个索引,隐式索引结果不包含最后一个索引。
(3)索引器:loc、iloc
loc: 显式索引访问,即根据用户指定的索引访问;
iloc: 隐式索引访问,即根据位置序号访问。
Series中常用方法
sort_index():对Series按照索引排序,生成一个新的Series对象;
sort_values():对Series按照值排序,生成一个新的Series对象;
rank():对值进行排名,从1开始,对于相同的值默认采用平均排名;
reindex():重新设置索引,生成一个新的Series对象。新的索引长度和原始索引长度可以不相同,如果新的索引不在原始数据中,则对应的值为NaN,如果在原始数据中,则值保持不变,可通过method参数指定值填充的方案(要求原始索引是递增的),还可通过fill_value参数指定填充值;
Series对象也可执行numpy中的一些运算,此时只对值进行操作,索引和值之间的对应关系不变;
Series对象之间执行运算时,会自动进行对齐,相同索引之间执行相应运算,不同索引对应的值为NaN。
基本结构之DataFrame
DataFrame可以看作是一种既有行索引, 又有列索引的二维数组,类似于Excel表或关系型数据库中的二维表,是Pandas中最常用的基本结构。前面介绍的Series只有一列数值,DataFrame中往往有多列数值,一列可以看成是一个Series组成。
DataFrame的创建
可通过值为一维ndarray,list, dict或者Series的字典或列表;二维的ndarray;单个Series、列表、一维数组,此时DataFrame中只有一列;其他的DataFrame等创建;
创建DataFrame时,可通过index和columns参数指定行索引 和 列索引,若没有指定索引,则系统会提供默认索引,从0开始不断增大;
通过多个Series创建DataFrame时,多个Series对象会自动对齐,即多个Series对象会根据行索引自动匹配,行索引相同的放在同一行。若指定了index ,则会以指定的索引为准,去匹配已有的值,丢弃所有未和 index匹配的数据 ,如果指定的索引没有提供对应的值,则表示该值缺失,使用NaN。
DataFrame中数据访问
DataFrame对象与二维 numpy 数组和 共享索引的若干个Series对象构成的字典有很多相似之处,DataFrame中数据的访问可与它们进行类比学习。
(1)将 DataFrame 看作字典
以列的索引为关键字,获取某一列数据,例如d_1[列索引],结果为Series对象,可进一步获取某个数据,例如d_1[列索引][行索引],需要使用两个中括号,不能合并;
如果列的索引为字符串,则可以列名为属性名,获取某一列数据,例如d_1.属性名,前提是列名符合标识符的命名规范。如果列名不符合规范或与 DataFrame 中属性相同,例如shape、index等,则不能用属性形式。
与Series类似,DataFrame中也存在隐式索引和显式索引。显式索引主要是根据用户指定的索引访问数据,而隐式索引主要是根据系统生成的索引即位置序号访问数据。DataFrame也支持索引器访问数据,其中loc[行索引, 列索引]通过显示索引访问数据, iloc[行索引, 列索引]通过隐式索引访问数据。
(2)将DataFrame看作二维数组
支持行列转置、布尔表达式等;
支持行切片操作,不支持列切片。若想访问多列数据,可将多个列索引放在一个列表中,例如d_1[[列1,列2]];
DataFrame 常见属性
shape:获取形状信息,结果为一个元组;
dtypes:获取各字段的数据类型,结果为Series;
values:获取数据内容,结果通常为二维数组;
columns:获取列索引,即字段名称,结果为Index;
index: 获取行索引,即行的标签,结果为Index。
axes:同时获取行和列索引,结果为Index的列表;
DataFrame 常见方法
DataFrame中提供了大量的实用方法,例如按照某一列或多列的值进行排序、将DataFrame中的数据保存到文件中、进行抽样、分组、统计、去重等等。详细方法介绍如下:
DataFrame的合并操作
DataFrame中提供了一个join()方法用于将其他DataFrame中的列合并到当前DataFrame中,类似于数据库中的连接,支持内连接(只保留两个对象中都存在的行索引对应的数据)、外连接(保留两个对象中,只要有一方存在的行索引对应的数据,如果另一方不存在则相应值为NaN)、左连接(只保留左边对象中的所有行索引对应的数据)和右连接(只保留左边对象中的所有行索引对应的数据)等,默认情况采用左连接。join()方法合并数据时,默认根据两个对象的行索引进行匹配连接,如果有相同列名,则需指定后缀以区分,否则会出错,也可通过on参数指定合并时参考的列,此时需将该列作为其他对象的行索引,也就是说让另一个对象的行索引和当前对象的on进行匹配。
Pandas中常用方法
加载数据的方法
Pandas中提供了大量的从不同格式文件中加载数据的方法,例如读取Excel文件、CSV文件、Json格式文本、HTML网页等等,大家可以根据实际需求,选择相应的方法,每个方法根据文件特征需要传递的参数不同,可关联源代码查看详情。主要的方法如下:
read_excel():从excel文件中读取数据;
read_csv():从csv文件中读取数据;
read_clipboard():从剪切板中数据;
read_html():从网页中读取数据;
read_json():从 json 格式文本中读取数据;
read_pickle():从pickle文件中读取数据;
……
在此,以实际应用中使用比较广泛的Excel文件读取为例,介绍一些核心的参数含义。
io:文件路径,可以是本地文件也可以是网络文件,支持xls、xlsx、xlsm等格式;
sheet_name:表单序号或名称,可以是一个列表,表示同时读取多个表单,默认为第一个表单;
hearder:表头,可以是整数或整数列表,默认为第一行;
names:指定列名,默认为表头;
index_col:索引列,可以是整数或整数列表;
usecols:使用到的列,默认加载所有列,如果需要加载某些列可指定这些列的序号;
dtype:指定每一列的数据类型;
skiprows:跳过多少行,常用于表的最开始几行为说明性文档的情景;
nrows:解析多少行;
na_values:指定哪些值被看做是缺失值;
……
数据显示的方法及关键属性
Pandas中提供了数据显示的一些默认设置,例如默认显示60行,超过60行只显示前5行、后5行其他都用省略号表示等。可通过一些方法更改设置,相应方法如下:
get_option(属性名):获取相应的属性值;
set_option(属性名,值):设置相应的属性值;
reset_option(属性名):重置相应的属性值,恢复成默认值;
describe_option(属性名):获取相应的属性描述信息,包括默认值,当前值等信息;
option_context(属性名):设置临时的属性值,主要用于上下文管理器中;
显示设置中经常使用到的一些属性如下:
display.max_rows:显示的最大行数,默认为60行,超过60行时,只显示前5行、后5行,其他行用省略号表示,None表示不限制,显示所有行;
display.max_columns:显示的最大列数,默认为0,根据宽度自动确定,显示不下时,中间列用省略号表示,None表示不限制,显示所有;
display.expand_frame_repr:是否换行打印超过宽度的数据,默认为True,当不限制列的数量,同时一行又放不下那么多列信息时,默认会自动换行,可设置为False,这样会添加水平滚动条,在一行显示;
display_max_colwidth:显示的最大列宽,默认为50个字符,超出以省略号表示,None表示不限制;
display.precision:设置小数显示精度,默认为6位。
缺失值处理方法
缺失值是指数据集中的某些值为空。常见的处理方法有:删除法、替换法和插补法。
删除法:直接将包含缺失值的记录删除,常用于缺失值比例非常低,如5%以内;
替换法:用某种值直接替换缺失值,例如连续变量的均值或中位数,离散变量的众数等;
插补法:根据其他已观测值进行预测,例如K近邻、回归插补法等;
Pandas中提供了强大的缺失值处理,相关方法如下:
dropna():删除包含缺失值的行,可通过axis参数设置删除所在列,通过thresh参数指定阈值,只有非空值大于该阈值的行或列才保留;
fillna():用指定值填充缺失值,可为不同的列指定不同的填充值,此时传递一个字典,键为列名,值为该列缺失值的填充值,可通过method参数指定填充方式;通过limit参数限定填充的数量;
isna()或isnull():判断元素是否为缺失值,如果元素为缺失值,则对应位置为True,否则为False。
Pandas中的分组操作
分组操作主要是根据某个或某些特征对原始数据进行分割,然后可以在子集上应用一些函数,例如聚合、转换、过滤等,Pandas中的分组通过groupby函数实现。Series 和DataFrame 都支持分组操作。分组后将得到一个分组对象,通过groups属性可查看分组信息,通过get_group()可获取某个组详情,通过agg()可对组执行聚合函数,通过transform()方法可对组进行转换,通过filter()方法对某些组进行过滤。
Pandas中的数据合并操作
数据合并是指将多个数据按照一定的规则合并到一起。在实际应用中,常常涉及多个数据的联合操作,而这些数据又保存在不同的文件中,此时需要先进行合并,再执行相关操作。Pandas中提供了一些数据合并的方法,例如merge()、contact()等。
(1)merge()方法,按照某列或某些列将两个数据对象进行合并,与前面介绍的DataFrame中的join()方法非常相似。
left:左边的数据对象;
right:右边的数据对象;
how:连接方式,默认为inner,此外还有left、right、outer等;
on:连接的列名称,必须在两个对象中,默认以两个对象的列名的交集作为连接键;
left_on:左边对象中用于连接的键的列名;
right_on:右边对象中用于连接的键的列名;
left_index:使用左边的行索引作为连接键;
right_index:使用右边的行索引作为连接键;
sort:是否将合并的数据排序,默认为False;
suffixes:列名相同时,指定的后缀。
(2)contact()方法,沿着一条轴,将多个对象堆叠起来,关键参数如下:
objs:需合并的对象序列;
axis:指定合并的轴,0/‘index’, 1/‘columns’,默认为0;
join:连接方式,只有inner和outer,默认为outer;
ignore_index:是否忽略索引,默认为False;
verify_integrity:验证完整性,较为耗时,默认为False;
……
更多关于手把手教你学Python的文章请关注微信公众号:Python资源分享。详细的视频讲解可查看 CSDN学院 里的手把手教你学Python系列视频:https://edu.csdn.net/lecturer/5686。
完整的课件下载网址如下:
Pandas入门与实践(课件)_pandas课件,pandas教程ppt-Python文档类资源-CSDN下载详细介绍Python中数据分析与处理的第三方库Pandas的使用,包括基本结构Series、Datapandas课件更多下载资源、学习资料请访问CSDN下载频道.https://download.csdn.net/download/Dream_Gao1989/13624886?spm=1001.2014.3001.5503
手把手教你学Python之Pandas(一文掌握数据分析与处理库-Pandas)相关推荐
- python global用法_14_手把手教你学Python之函数(下)
变量作用域:根据变量定义的位置,可将变量分为全局变量和局部变量. 全局变量:定义在函数外面的变量,可以在多个函数中进行访问,但不能执行赋值操作.如果有赋值语句,相当于创建了一个同名的局部变量: 局部变 ...
- oracle数据库更新语句_20_手把手教你学Python之操作数据库
数据库是数据的仓库,将大量数据按照一定的方式组织并存储起来,方便进行管理和维护,例如快速检索和统计等.数据库的主要特点: 以一定的方式组织.存储数据: 能为多个用户共享: 与程序彼此独立. -- 数据 ...
- python中字典的value可以为任意对象_手把手教你学Python之字典
字典是一种无序可变的容器,字典中的元素都是"键(key):值(value)"对, "键"和"值"之间用冒号隔开,所有"键值对&qu ...
- 手把手教你学Python之波士顿房价预测(scikit-learn的应用)
目录 1.波士顿房价预测介绍 2.线性回归算法 3.调用scikit-learn库实现房价预测 1.波士顿房价预测介绍 问题描述:波士顿房价数据集统计的是20世纪70年代中期波士顿郊区房价的中位数,统 ...
- 手把手教你学Python之Matplotlib绘图(一文掌握数据可视化库-Matplotlib)
目录 Matplotlib介绍 线形图(折线图) 直方图 条形图 饼状图 散点图 Matplotlib介绍 matplotlib是一个Python 的2D绘图库,提供了一套表示和操作图以 ...
- 手把手教你学Python之常见运算符
目录 算术运算符 关系运算符 逻辑运算符 位运算符 成员运算符 身份运算符 前面给大家介绍了Python中的一些基本数据类型,这些数据之间如何进行运算呢?这就需要借助于一些运算符了,Python中提供 ...
- 手把手教你学Python之文件操作(一文掌握文件操作)
目录 1.Python中文本文件的读写 2.Python中常用的文件与文件夹操作方法 3.Python中Excel文件的读写 4.Python读取Excel文件案例 为了保存数据,方便修改和分享,数 ...
- python私人定制_手把手教你学python第十五讲(魔法方法续私人“定制”)
python无处不对象的深刻理解 前面写了这么多,我觉得有必要从一个大的层面,也就是OO来看问题的本质.只要你调用对象的语法是合乎python的习惯的,那就是可以的,我们以前从来没有像下面这么写过,对 ...
- python 函数修饰器 父类_手把手教你学python第十四讲(函数装饰器,super用法和时间处理)...
文中有些字在图中是因为每篇文章最多100张图片,我把有的小图片和文字一起截图了,文中所有的引用都会标出原文网址,除此以外都是作者原创. 有时候会在文章最前或者最后补充一些知识或者把前面说的有问题的地方 ...
最新文章
- 总结是学习最好的方式(转)
- *HDU 2108 计算几何
- Windows2003无法看到网络连接,修复COM+组件
- 地图与定位之大头针视图
- LeetCode Algorithm 103. 二叉树的锯齿形层序遍历
- Html页面上输出不了PHP,在页面上直接输出未经解析的HTML源码
- Maven精选系列--POM文件解析
- (数据库系统概论|王珊)第三章关系数据库标准语言SQL-第二、三节:数据定义
- Swift中文教程(十五) 析构
- 把数据或是numpy数据转换为keras张量
- python初始化函数_当你学会了Python爬虫,网上的图片素材就开始免费了
- 为解决半导体供应短缺问题,全球半导体厂商迅速增产
- 设计灵感|没有素材时,如何用排版取胜?
- 最近在搞react redux react-router等,
- [论文阅读] Cross-level Contrastive Learning and Consistency Constraint for Medical Image Segmentation
- 吴恩达神经网络和深度学习-学习笔记-9-mini-batch梯度下降法
- linux的shell键盘输入,linux shell获取键盘输入
- 统计学习基础(ESL)中文版
- 数学建模中的传染病模型及其编程求解
- 编写一个主函数和子函数char *tran(int x, int r), 要求是:函数tran将十进制整数x转换成r进制数y(r在2~16之间), x和r的值由主调函数(即主函数)传入,y的值需要返
热门文章
- 如何做一个网页送给女朋友做生日礼物
- 路由器重温——WAN接入/互联-DCC配置管理2
- linux以root账号登陆gnome,CentOS 7 - 以root身份登入Gnome
- 我想使用Simulink模型模拟期间生成的数据更新我在App Designer中设计的GUI。换句话说,如何从App Designer访问Simulink模型的运行时参数?
- iVX无代码挑战五秒游戏制作
- Simulink永磁同步电机控制仿真系列五:使用滑模观测器的反电动势法位置估计
- 基于TCP/IP协议 区别 GET和POST
- 家里想养花了(持续更新)
- CAN和CANFD的主要差异
- 为什么论文中有的空格特别大