第三节 Pandas入门基础

本章节以及后续章节的源码,当然也可以从我的github下载,在源码中我自己加了一些中文注释。

现在是晚上九点十五,哎,今天要写的东西有点多,看来又得推到明天了。不该刷抖音看微博,emmmmmm..........

进入正题:

Pandas含有使数据清洗和分析工作变得更快更简单的数据结构和操作工具。pandas经常和其它工具一同使用,如数值计算工具NumPy和SciPy,分析库statsmodels和scikit-learn,和数据可视化库matplotlib。pandas是基于NumPy数组构建的,特别是基于数组的函数和不使用for循环的数据处理。

虽然pandas采用了大量的NumPy编码风格,但二者最大的不同是pandas是专门为处理表格和混杂数据设计的。而NumPy更适合处理统一的数值数组数据。

使用pandas首先要了解它的两个数据结构:Series和DataFrame

一、Series

Series是一种类似于一维数组的对象,它由一组数据以及一组与之相关的数据标签(即索引)组成。

第三节 Pandas入门基础_第1张图片
第三节 Pandas入门基础_第2张图片
第三节 Pandas入门基础_第3张图片
第三节 Pandas入门基础_第4张图片
第三节 Pandas入门基础_第5张图片
第三节 Pandas入门基础_第6张图片
第三节 Pandas入门基础_第7张图片

二、DataFrame

DataFrame是一个表格型的数据结构,它含有一组有序的列,每列可以是不同的值类(数值、字符串、布尔值等)

可以输入给DataFrame构造器的数据:

第三节 Pandas入门基础_第8张图片

构建DataFrame

第三节 Pandas入门基础_第9张图片
第三节 Pandas入门基础_第10张图片
第三节 Pandas入门基础_第11张图片
第三节 Pandas入门基础_第12张图片
第三节 Pandas入门基础_第13张图片
第三节 Pandas入门基础_第14张图片
第三节 Pandas入门基础_第15张图片
第三节 Pandas入门基础_第16张图片
第三节 Pandas入门基础_第17张图片
第三节 Pandas入门基础_第18张图片
第三节 Pandas入门基础_第19张图片

三、索引对象

pandas的索引对象负责管理轴标签和其他元数据(比如轴名称等)。构建Series和DataFrame时,所用的任何数组或其他序列标签都会被转换成一个Index

第三节 Pandas入门基础_第20张图片

与python的集合不同,pandas的Index可以包含重复的标签

每个索引都有一些方法和属性,它们可用于设置逻辑并回答有关该索引所包含的数据的常见问题。表5-2列出了这些函数。

第三节 Pandas入门基础_第21张图片

四、Pandas基本功能

1、重新索引(reindex函数)

reindex函数的参数:

第三节 Pandas入门基础_第22张图片

插值(method)的选项:

第三节 Pandas入门基础_第23张图片
第三节 Pandas入门基础_第24张图片
第三节 Pandas入门基础_第25张图片
第三节 Pandas入门基础_第26张图片
第三节 Pandas入门基础_第27张图片
第三节 Pandas入门基础_第28张图片

2、丢弃指定轴上的项

丢弃某条轴上的一个或多个项很简单,只要有一个索引数组或列表即可。drop方法返回的是一个在指定轴上删除了指定值的新对象。

第三节 Pandas入门基础_第29张图片
第三节 Pandas入门基础_第30张图片
用标签序列调用drop会从行标签(axis 0)删除值
第三节 Pandas入门基础_第31张图片
通过传递axis=1或axis='columns'可以删除列的值

3、索引、选取和过滤

第三节 Pandas入门基础_第32张图片
第三节 Pandas入门基础_第33张图片

利用标签的切片运算与普通的Python切片运算不同,其末端是包含的

第三节 Pandas入门基础_第34张图片
第三节 Pandas入门基础_第35张图片
第三节 Pandas入门基础_第36张图片
通过布尔型DataFrame进行索引  

(1)  loc和iloc的区别

iloc主要使用数字来索引数据,而不能使用字符型的标签来索引数据。而loc则刚好相反,只能使用字符型标签来索引数据,不能使用数字来索引数据,不过有特殊情况,当数据框dataframe的行标签或者列标签为数字,loc就可以来其来索引。

(2)ix是一种混合索引,字符型标签和整型数据索引都可以。在pandas0.20.0及以上版本,ix已经丢弃,请尽量使用loc和iloc;

第三节 Pandas入门基础_第37张图片
第三节 Pandas入门基础_第38张图片
第三节 Pandas入门基础_第39张图片

所以,在pandas中,有多个方法可以选取和重新组合数据,对于DataFrame,表5-4进行了总结。

第三节 Pandas入门基础_第40张图片

4、整数索引

处理整数索引的pandas对象常常难住新手,因为它与Python内置的列表和元组的索引语法不同。例如,你可能不认为下面的代码会出错:

ser = pd.Series(np.arange(3.))

ser

ser[-1]

这里,pandas可以勉强进行整数索引,但是会导致小bug。我们有包含0,1,2的索引,但是引入用户想要的东西(基于标签或位置的索引)很难,另外,对于非整数索引,就不会产生歧义

第三节 Pandas入门基础_第41张图片

为了进行统一,如果轴索引含有整数,数据选取总会使用标签。为了更准确,请使用loc(标签)或iloc(整数)

5、算术运算和数据对齐

pandas最重要的一个功能是,它可以对不同索引的对象进行算术运算。在将对象相加时,如果存在不同的索引对,则结果的索引就是该索引对的并集。对于有数据库经验的用户,这就像在索引标签上进行自动外连接。

第三节 Pandas入门基础_第42张图片
自动的数据对齐操作在不重叠的索引处引入了NA值。缺失值会在算术运算过程中传播
第三节 Pandas入门基础_第43张图片

对于DataFrame,对齐操作会同时发生在行和列上:

第三节 Pandas入门基础_第44张图片

把它们相加后将会返回一个新的DataFrame,其索引和列为原来那两个DataFrame的并集:

第三节 Pandas入门基础_第45张图片


表下列出了Series和DataFrame的算术方法。它们每个都有一个副本,以字母r开头,它会翻转参数。因此这两个语句是等价的:

第三节 Pandas入门基础_第46张图片

灵活的算术方法:

第三节 Pandas入门基础_第47张图片

DataFrame和Series之间的运算:

第三节 Pandas入门基础_第48张图片
当我们从arr减去arr[0],每一行都会执行这个操作,这就叫做广播(broadcasting)

默认情况下,DataFrame和Series之间的算术运算会将Series的索引匹配到DataFrame的列,然后沿着行一直向下广播:

第三节 Pandas入门基础_第49张图片

如果某个索引值在DataFrame的列或Series的索引中找不到,则参与运算的两个对象就会被重新索引以形成并集:

第三节 Pandas入门基础_第50张图片

如果你希望匹配行且在列上广播,则必须使用算术运算方法。例如:

第三节 Pandas入门基础_第51张图片
第三节 Pandas入门基础_第52张图片
第三节 Pandas入门基础_第53张图片

6、函数应用和映射

第三节 Pandas入门基础_第54张图片

另一个常见的操作是将函数应用到由各列或行所形成的一维数组上,DataFrame 的apply方法即可实现该功能


这里的函数f,计算了一个Series的最大值和最小值的差,在frame的每列都执行了一次。结果是一个Series,使用frame的列作为索引。

第三节 Pandas入门基础_第55张图片
第三节 Pandas入门基础_第56张图片

7、排序和排名

要对行或列索引进行排序,可使用sort_index方法,它将返回一个已排序的新对象

第三节 Pandas入门基础_第57张图片
第三节 Pandas入门基础_第58张图片
在排序时,任何缺失值默认都会被放到Series的末尾
第三节 Pandas入门基础_第59张图片

排名用rank()函数,rank是通过“为各组分配一个平均排名”的方式破坏平级关系的:

第三节 Pandas入门基础_第60张图片
条目0和2没有使用平均排名6.5,它们被设成了6和7,因为数据中标签0位于标签2的前面。
第三节 Pandas入门基础_第61张图片
第三节 Pandas入门基础_第62张图片

排名时用于破坏平级关系的method选项:

第三节 Pandas入门基础_第63张图片

8、带有重复值的轴索引

第三节 Pandas入门基础_第64张图片
第三节 Pandas入门基础_第65张图片

8、汇总和计算描述统计

pandas对象拥有一组常用的数学和统计方法。它们大部分都属于越简和汇总统计,用于从Series中提取单个值(如sum和mean)或从DataFrame的行或列中提取一个Series。

约简方法的选项:

第三节 Pandas入门基础_第66张图片

描述和汇总统计方法:

第三节 Pandas入门基础_第67张图片
第三节 Pandas入门基础_第68张图片
第三节 Pandas入门基础_第69张图片
第三节 Pandas入门基础_第70张图片

10、相关系数和协方差

相关系数和协方差是通过参数对计算出来的。我们选取来自Yahoo!Finance的股票价格和成交量:

在看代码前先干两件事:

一、pip install pandas_datareader安装这个模块,然后把这个模块下(\Lib\site-packages\pandas_datareader)下的fred.py文件中的pandas.core.common import is_list_like修改为pandas.api.types import is_list_like

二、pip install fix_yahoo_finance安装这个模块,在获取数据前运行以下代码即可:

import fix_yahoo_finance as fy

fy.pdr_override()

第三节 Pandas入门基础_第71张图片
第三节 Pandas入门基础_第72张图片
第三节 Pandas入门基础_第73张图片
AAPL的数据
第三节 Pandas入门基础_第74张图片
第三节 Pandas入门基础_第75张图片
第三节 Pandas入门基础_第76张图片
第三节 Pandas入门基础_第77张图片

11、唯一值、值计数以及成员资格

唯一值、值计数、成员资格方法:

第三节 Pandas入门基础_第78张图片
第三节 Pandas入门基础_第79张图片
第三节 Pandas入门基础_第80张图片
第三节 Pandas入门基础_第81张图片
结果中的行标签是所有列的唯一值。后面的频率值是每个列中这些值的相应计数。

五、层次化索引

层次化索引是pandas的一项重要功能,它使你能在一个轴上拥有多个(两个以上)索引级别。

第三节 Pandas入门基础_第82张图片
第三节 Pandas入门基础_第83张图片
第三节 Pandas入门基础_第84张图片
第三节 Pandas入门基础_第85张图片
第三节 Pandas入门基础_第86张图片

重新调整某条轴上各级别的顺序,或根据指定级别上的值对数据进行排序。swaplevel接受两个级别编号或名称,并返回一个互换了级别的新对象(但数据不会发生变化):

第三节 Pandas入门基础_第87张图片

sort_index则根据单个级别中的值对数据进行排序。交换级别时,常常也会用到sort_index,这样最终结果就是按照指定顺序进行字母排序了:

第三节 Pandas入门基础_第88张图片

许多对DataFrame和Series的描述和汇总统计都有一个level选项,它用于指定在某条轴上求和的级别。再以上面那个DataFrame为例,我们可以根据行或列上的级别来进行求和:

第三节 Pandas入门基础_第89张图片

如果想要将DataFrame的一个或多个列当做行索引来用,或者希望将行索引变成DataFrame的列,使用set_index函数和reset_index函数

第三节 Pandas入门基础_第90张图片
第三节 Pandas入门基础_第91张图片

六、面板数据

pandas有一个Panel数据结构,可以看做一个三维版的DataFrame。pandas的大部分开发工作都集中在表格型数据的操作上,因为这些数据更常见,而且层次化索引也使得多数情况下没必要使用真正的N维数组。

可以使用DataFrame对象组成的字典或一个三维ndarray来创建Panel对象:

第三节 Pandas入门基础_第92张图片

快速学习:

第一节 NumPy基础(一)

第二节 NumPy基础(二)

第三节 Pandas入门基础

第四节 数据加载、存储

第五节 数据清洗

第六节 数据合并、重塑

第七节 数据聚合与分组运算

第八节 数据可视化

第九节 pandas高级应用

第十节 时间序列

第十一节 Python建模库

数据分析案例--1880-2010年间全美婴儿姓名的处理

数据分析案例--MovieLens 1M数据集

数据分析案例--USA.gov数据

数据分析案例--2012联邦选举委员会数据库

数据分析案例--USDA食品数据库

你可能感兴趣的:(第三节 Pandas入门基础)