第三节 Pandas入门基础

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

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

进入正题:

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

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

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

一、Series

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

二、DataFrame

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

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

构建DataFrame

三、索引对象

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

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

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

四、Pandas基本功能

1、重新索引(reindex函数)

reindex函数的参数:

插值(method)的选项:

2、丢弃指定轴上的项

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

用标签序列调用drop会从行标签(axis 0)删除值
通过传递axis=1或axis='columns'可以删除列的值

3、索引、选取和过滤

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

通过布尔型DataFrame进行索引  

(1)  loc和iloc的区别

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

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

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

4、整数索引

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

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

ser

ser[-1]

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

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

5、算术运算和数据对齐

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

自动的数据对齐操作在不重叠的索引处引入了NA值。缺失值会在算术运算过程中传播

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

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


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

灵活的算术方法:

DataFrame和Series之间的运算:

当我们从arr减去arr[0],每一行都会执行这个操作,这就叫做广播(broadcasting)

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

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

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

6、函数应用和映射

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


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

7、排序和排名

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

在排序时,任何缺失值默认都会被放到Series的末尾

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

条目0和2没有使用平均排名6.5,它们被设成了6和7,因为数据中标签0位于标签2的前面。

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

8、带有重复值的轴索引

8、汇总和计算描述统计

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

约简方法的选项:

描述和汇总统计方法:

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()

AAPL的数据

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

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

结果中的行标签是所有列的唯一值。后面的频率值是每个列中这些值的相应计数。

五、层次化索引

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

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

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

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

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

六、面板数据

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

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

快速学习:

第一节 NumPy基础(一)

第二节 NumPy基础(二)

第三节 Pandas入门基础

第四节 数据加载、存储

第五节 数据清洗

第六节 数据合并、重塑

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

第八节 数据可视化

第九节 pandas高级应用

第十节 时间序列

第十一节 Python建模库

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

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

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

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

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 214,029评论 6 493
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 91,238评论 3 388
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 159,576评论 0 349
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 57,214评论 1 287
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 66,324评论 6 386
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 50,392评论 1 292
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 39,416评论 3 412
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 38,196评论 0 269
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,631评论 1 306
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,919评论 2 328
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,090评论 1 342
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,767评论 4 337
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 40,410评论 3 322
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,090评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,328评论 1 267
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,952评论 2 365
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,979评论 2 351

推荐阅读更多精彩内容