第五课内容: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 中
数据的选择
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'] ]
df [ 'column_name' ]
df.column_name
都是通过以上句型来选取列的数据内容。
觉得这个和以前学英语差不多啊!记单词,记句型,注意括号使用的语法。。。都是一个套路
上面讲的是列的索引,要是我们需要行的数据呢?
中括号里面写的是行所对应的数值索引,这有点像之前学的切片:
行的数据选取
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 兆亿美元的国家
文科生学Python系列9: Pandas入门www.jianshu.com