文科生学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兆亿美元的国家

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

推荐阅读更多精彩内容