前言
前文再续,书接上一回,前两回讲到了Pandas的Series和DataFrame,今天我们使用jupyter notebook来进一步聊聊series和dataframe之间的关系。之前的文章中,我们了解到series和dataframe之间可以相互转换,看完这篇文章,相信你对它们之间的关系会有进一步的了解。
正文
import data
首先,和之前一样,我们先导入数据库
import numpy as py
import pandas as pd
from pandas import Series ,DataFrame
在这里,我们来创建一个数据data,这个data是可以随自己喜欢去定义,那我这里是定义了三个列表,分别是国家,城市还有人口(人口数据是乱输入的,请勿当真),在每个列表里头又填充了三个元素,就组成了我们的data了。
data={'country':['China','United States','Canada'],'City':['HK','LA','VAN'],'Population':['546658889','8566554895','9541755556']}
我们打印一下data里面的数据,后面我们会将会把这些数据变成我们所熟知的series和dataframe类型,但是我们知道我们这个数据是无法全部转换成series的,因此我们在这里,一个数据组一个数据组去用pandas数据库转换成series类型。
series
如上述代码所示,我们在data里面去找到country这个列表,我们用s1来接住我们变换的数据,接着通过打印我们所创建的s1来查看里面到底装了什么东西。
根据打印出来的内容,我们不难发现我们用pd.Series(data['XXXX]'后,因为这是一个一维的数据,而且每一个元素前面还有索引。既然我们假设其是series,那我们不妨去验证一下。
和专栏里前几篇文章一样,在这里,我们用type()这个函数来查看一下s1的数据类型,果不其然,和我们的假设是一样。那我们就来查看一下它的基本特征
我们通过这两个函数来查看其内容和索引
XX.values
XX.index
通过结果我们发现,内容就是我们此前定义好的东西,而索引呢,我们没有对其进行明确规定,因此系统给我们自动生成了index,它是从0开始,步长为1,到我们的定义元素的数量最大值。那这时候,会有同学提出疑问了,能不能不要系统自己生成,我自己的index要我自己做主。当然啦,这是可以的,下面我们就展示一下如何操作。
dataframe
我们在data部分创建了三个列表,可以看作是一个多维的数据,因此我们把我们的数据用下面的语句转化成我们所熟知的dataframe类型
pd.DataFrame(data)
得到的数据用df这个变量来接住,我们再打印一下df这个变量,我们查看一下结果,这里把我们所定义到的每一个列表的名称都变为了每一 列的名称,而行就是系统自动填补的索引,我们每个列表里头有三个元素,因此index从0到2。
在上面的代码里面,我们取出data这个datafraem类型中名为City的这一列,取出的数据用core这个变量来接住。我们查看一下core的类型,运行结果为serise,这也验证了我们此前的想法,series数据组成了dataframe,换句话说,在我们所创建的这个名为data的dataframe里面,可以转换成三个分别名为country,City,Population的列。
iterrows
df.iterrows()
在Python中,df.iterrows()
是Pandas库中的一个函数,用于迭代DataFrame的行。当你调用 df.iterrows()
时,它会返回一个迭代器,每次迭代返回一个索引和行的Series对象。这允许你遍历DataFrame中的所有行,并访问每一行的索引和数据。(对迭代器不熟悉或者对迭代器感兴趣的小伙伴们可以去看看博主的另一篇有关于迭代器的文章)
for row in df.iterrows():
print(row),print(type(row),print(len(row)))
在这段代码中,正在迭代一个Pandas DataFrame df
中的每一行,使用 df.iterrows()
。在for循环中,每次迭代都会将一个索引和行的数据赋值给变量 row
。然后,我们打印 row
,它的类型,以及 row
的长度。
运行的结果如下所示
在运行的结果中,这里显示为元组类型,元组里面包含了index和数据。我们看到每一行row的长度为2,这个2是由index和我们所定义的数据所组成的。
row[0]
:当前行的索引(一个整数)。row[1]
:当前行的数据,这是一个Series对象,包含了该行的所有列数据。
我们打印一下row[0]和row[1]的类型。
可以看到,row[0] 是int(整数数据类型),而row[1] 是series的数据类型,也和我们刚刚给出的结果是一致的。
relationship
在这里,我们把data里面的每一列都单独拎出来,分别用a1,a2,a3这三个变量来承接住。
我们创建一个df_new的变量,用我们刚刚创建的三个变量和pandas数据库来创建dataframe,并用index加以命名,分别命名为country,city,population,但在运行结果里面,我们发现和我们此前所创建的data相比,这里填充数据的方式是一行一行填充的,而我们创建的data里面,数据是以列的形式进行填充的。为了还原成和我们所创建data一样,我们转置一下矩阵就可以了。
这样就和我们所创建的data一致了,这也揭示了dataframe和series之间的相互转化关系。
后续
在这个专栏里面,我将会带大家深入地去探索一下pandas这个数据库的其他特性,希望大伙能专注一下这个专栏,谢谢同学们啦。