大师网-带你快速走向大师之路 解决你在学习过程中的疑惑,带你快速进入大师之门。节省时间,提升效率

文科生学Python系列9: Pandas入门

第五课内容:Pandas入门

pandas DataFrame(数据框)

pandas Series

数据的选择

案例:Iris 鸢尾花数据

数据的导入和观察

数据选择复习

数据可视化初探


Pandas DataFrame

我们存储数据最常用的形式是表格

表格就是由行与列所构成的一种有序的组织形式

表格的第一行一般是变量名称,也称为表头(header)

不同的变量可以是不同的数据类型。

比如下面这个表格罗列了2016年GDP最高的5个国家以及对应的首都,人口(百万),GDP(万亿美元),和所在大洲


问题:如何在python中表示以上这个表格?

思考思路:

在第四节课中,我们介绍了二维numpy array。但是numpy array只能存储一种数据类型,但是上面的表格同时有数值变量和字符串,

——>所以我们需要使用pandas包来处理,

——>pandas是数据科学中最常用的包之一,可以高效的处理各种数据格式。也因为 pandas是基于numpy构建的。

我们将重点介绍pandas中的series和DataFrame

从字典创建一个DataFrame

回忆第三节课程,我们需要键(key)和值(value)来定义一个字典

# 首先产生一个叫gdp的字典


产生一个叫gdp的字典

这就是在Python中显示的表格啦!简洁美观!

记得每一次运行都要记得重新赋值 import pandas as pd ,不然后面是没有办法运行没有被定义的代码的。

这里的套路是:首先要定义一个叫gdp的字典名称,DataFrame是一个有魔法的固定词汇,数据表格的意思,也就是用它来赋值代码,输出的结果是一个表格,这可是在python中的表格~

gdp_df=pd.DataFrame(gdp),在pandas里面,强制转换gdp这个字典为DataFrame的格式,等同于 被赋值的gdp的DataFrame数据表格。我的理解啊~

首行加黑加粗的是表头,主体部分就是我们定义的数据内容了。

细心的人会发现,这里的表格的表头内容排列顺序和代码复制的内容顺序是不一样的,赋值的时候前面是country,capital,population,在形成的表格前面的是capital,continent,country。所以我们要是需要顺序一致的时候,应该怎么办呢?

如图:


表格行首内容顺序与代码一致

需要加 columns 这个名词,把顺序强调一遍,输出的结果就是和代码顺序一样的表格行首啦!也就是,使用column选项可以选择列的顺序

接下来,我们也可以通过index选项添加自定义的行标签(label)


把第一列的数字改成国家缩写小写

修改行和列的标签


修改内容

这里通过 index 和 columns 的索引修改相应的内容,把黑体的内容首字母全部换成大写了。

其实就是,要是需要修改表格内的内容,要在代码行重新输入新的值,然后运行就能修改Python表格中的内容了。

增加一列数据


增加数据

这个表格中增加的内容是表示这是GDP前5的数据,然后还有相对相应的国土面积。也就是在Python表格中增加数据的话,要在代码行重新赋值一个表头内容,然后一般是用字典的格式来定义主体内容,然后重新输出表格,就能得出增加数据的Python表格来。

Pandas series

pandas中的series对象是另一个重要的数据结构

你可以将其视为一个一维的DataFrame或者一个一维数组(array)加上一个索引(index)

在这节课后半部分,我们将展示series在数据过滤和分组运算中起到作用

来吧!又是一个新词汇!记下来哦!


Pandas series

DataFrame是二维的数据,Series是一维数据,是一个数列类型。Series 可以看作是DataFrame 表格中的某一列。

也是一样的套路,先定义一个函数,赋值 series ,在等号右边的 pd.Series 的 Series 一定要大写,和上面的 DataFrame 一样,D 和 F 要大写,可能是因为程序智能识别大写首字母这些词汇的含义,小写可能就不能识别那一层特殊功能了。 呃,有魔法和没魔法的区别 吧~

其中 14 语句中,第一列和上面的例子一样,一旦没有重新赋值,默认的索引就是 0,1,2,3这样排列下来的。在 15 语句中,用 index 重新赋值后,列的表头内容就出现变化了。


# 当我们使用点操作符来查看一个变量时,返回的是一个pandas series

# 在后续的布尔筛选中使用点方法可以简化代码

# US,...,UK是索引


series取表格中一列的值

其实到这一步也是出了很多错。在前面定义有歧义,导致这一步查找GDP的数据时,出现的全是NaN这个代号:


查找无数据,错误示范

往上查看,从某一步开始数值都已经是这样了,但是我竟然也没发现。就是从这里开始的:


出错的输出

全部重新打一遍,也是没发现出问题,但是输出全部都是错误提醒啊,来,感受一下满屏的错误提示:


出错提醒

发去群里求助,老师让我把从头开始的代码都给他看,然后发现问题在最初的定义赋值,或者GDP大小写开始。因为前面字典定义的GDP是小写的,后面为了和行首内容字母大写相一致,就直接修改行首内容,导致的结果就是程序识别不了 GDP=gdp 的数值。所以只能显示 “NaN”。

老师说这种情况,要不在创建的时候就和字典一致,要不在字典创建之后,使用 gdp_df.columns=[ ] 的形式对列名进行修改。

这是需要取gdp这一列数据的语法,在 Series 中直接就是后缀加“ .索引” 的形式得出数据。


得出数据类型

和之前的课一样的套路,需要分辨数据类型的时候,还是用 type 这个词汇实现魔法啊~~


直接得出索引

也可以用后缀加 index 直接得出 gdp 这一列对应的索引,也就是列的行首内容。在这里 gdp 对应的就是国家。


返回一个布尔型的series

在 gdp 这一列,有哪些数值是大于 4 的,大于 4 的用 True 表示,不大于 4 的用 False 表示。

老师说这样的应用在后面会经常用到哟~


用字典来创建Series

# 我们也可以将series视为一个长度固定且有顺序的字典,一些用于字典的函数也可以用于series

先创建一个字典,通过字典创建一个 Series 数据。

# 判断 ’US' 标签是否在gdp_series中


判断 ’US' 标签是否在 gdp_series 中

数据的选择

df [ ['column_name'] ] —— 选取列,生成DataFrame 格式数据(如果只是用 [ ] 则产生一个series);

df [ 'column_name' ] —— 选取列,生成 Series 格式数据;

df.column_name —— 选取列,生成 Series 格式数据


使用loc和iloc方法,选择行和列:

df.loc[ ] —— 使用行和列的标签索引选取数据

df.iloc[ ] ——使用行和列的数值索引选取数据


使用布尔索引筛选数据

这太多括号啦!看得有点晕,首先看选取列的三种方法,2个中括号,1个中括号和没有中括号的区别。


df [ ['column_name'] ]

这个我的理解是,在 gdp 这个DataFrame 的表格中,找出 Country 这个列的数据内容。这个用法不限于一列,要是想要显示更多列,也是一样的用法:


选取 Country 和 gdp 这两列

下面显示一个中括号的运算。


df [ 'column_name' ]

同样的内容, 23 条是DataFrame 类型, 24 条是 Series 类型,我们可以用 type 这个词汇来判断数据类型:


数据类型的显示

我们再来看看 df.column_name 这样的格式,出来的结果:


df.column_name

以上三种,就是:

df [ ['column_name'] ] —— 选取列,生成DataFrame 格式数据(如果只是用 [ ] 则产生一个series);

df [ 'column_name' ] —— 选取列,生成 Series 格式数据;

df.column_name —— 选取列,生成 Series 格式数据。

都是通过以上句型来选取列的数据内容。

觉得这个和以前学英语差不多啊!记单词,记句型,注意括号使用的语法。。。都是一个套路

上面讲的是列的索引,要是我们需要行的数据呢?

中括号里面写的是行所对应的数值索引,这有点像之前学的切片:


行的数据选取

loc方法

是一种基于行标签和列标签选取数据的方法

可以选取特定行或列,也可以同时指定所需要的行与列

和二维numpy array的格式非常类似

我们先来一个例子,需要 JP 和 DE 的行数据时,df.loc[ ] —— 使用行和列的标签索引选取数据:


df.loc[ ] —— 使用行和列的标签索引选取数据

要是我们除了想要特定的行数据,还想要特定的列,就在行的索引方括号后面加 逗号和列的索引就可以了:


df.loc[ ] —— 使用行和列的标签索引选取数据

增加的索引值是标签数据,也就是对应的字符串。loc方法正是基于标签选取数据的方法。

要是需要整一行的数据,和之前学的切片里面的公式语句差不多,用冒号来表示:


df.loc[ ] —— 使用行和列的标签索引选取数据

iloc方法

和loc方法不同的地方是,iloc是基于行列索引进行数据选择而不是标签

具体使用方法和loc类似,用行/列索引代替标签

在一个表格中,想要得到其中某行的数据,用 df.iloc[ ] 这样的句型,来进行行和列的数值索引选取数据:


df.iloc[ ] ——使用行和列的数值索引选取数据

要是想要得到特定的列的数据呢? 套路都一样,直接后面加方括号,里面填对应的列的数字:


df.iloc[ ] ——使用行和列的数值索引选取数据

使用布尔索引(boolean Indexing)筛选数据

我们可以使用pandas series来获取一个boolean series

布尔索引的使用和二维numpy array类似

可以结合 [ ] 或者loc一起使用

老师说前面给我们留下了一个布尔型索引没有后文,如下图的 36 条:


使用布尔索引(boolean Indexing)筛选数据

要在一个表格之内找到洲所在是 Asia 的,用布尔型判断有哪些是符合,哪些是不符合的。

37 条用句型套用,得出数据表格,内容是,符合 Continent 在 Asia 的国家有 CN 和 JP ,所对应的行内容全部显示出来。

这个时候,我们套用 loc 句型,得出的结果是一样的:


使用布尔索引(boolean Indexing)筛选数据

再来一个例子吧~

我们要在表格里面找到所在大洲是欧洲,并且GDP是要大于3的那个国家数据,首先用布尔型看数据符合还是不符合:


使用布尔索引(boolean Indexing)筛选数据

这里可以看到,只有 DE 这个数值才符合要求。我们看句型中,要是需要两个或两个以上的条件要同时满足,需要用到 & 这个符号,代表优先级,也就是同时运算。

然后用 DataFrame 这个句型进行运算,得到符合条件的整行数据:


使用布尔索引(boolean Indexing)筛选数据

还有鸢尾花数据这个大案例,留在下一篇文章啦!


作业5-1:

选出亚洲或者北美洲的国家记录 (提示:使用 isin 方法)

选出gdp大于4兆亿美元的国家