3.1 第三章 Pandas入门:Pandas中的Series、DataFrame数据结构以及两者关系



接下来,将介绍Pandas库。它是Python在数据科学领域的一个非常重要的工具,用于数据的分析和处理。

Pandas里预定义了两个重要的数据结构:Series、DataFrame,即序列、数据框。

一、Pandas库中的Series数据结构

跟Numpy中的Array有些类似。

1.1 创建Series:通过Python的一个list

新建一个notebook,重命名为Series;

导入两个包;

由上可以发现:Pandas库中Series的value,本质上是之前学习的Numpy的Array数组。

你看一上来,Pandas库,与之前Numpy库,就产生了交集

1.2 创建Series:通过Numpy库的Array

arange:排列的意思,数列

1.3 创建Series:通过Python的一个字典

1.

由上可见,通过Python的字典来创建Series,Series的index,其实就是字典的key。

由于字典的key是可以随意指定的,所以Series的index也是可以随意指定的。

2.

即:

也可以通过单独指定Series的index,来创建Series:

这种方式,更常用。

1.4 访问Series:以index来找value

对上述Series中的values,即Array数组,进行操作。

访问Series中的Array数组时,可以通过像Python中的字典一样,访问元素。

  • index为‘A’的value是什么?
  • value大于2的有哪些元素?

1.5 转换:Pandas的Series,转换为Python的字典

上述创建Pandas库的Series时,可以通过Python的一个字典来创建。

反之,也可以将一个Series,转换为一个Python的字典:

下面通过字典又能转换为原来的一样的Series:

Pandas库中的Series,

与Python中的字典,渊源颇深啊~

1.6 更改:Series的index

Pandas库的Series,它的index是可以改变的:

以s5为例:

1.7 更改:Series的名字、其中index名

可以给一个Series起一个名字:

也可以给Series的index,起一个名字:

二、Pandas库中的DataFrame数据结构

2.1 创建DataFrame:通过粘贴板

一个很cool的方法:

1.

导包;

打开一个web界面;

如下:

2.

复制web网页中上述红框中内容:

回到Jupyter Notebook:读取解析粘贴板中的内容,转换为一个DataFrame:

出现问题:

分析:因为目前网页内容(上图),与课程演示内容(下图),有所变动:即多了一个小图标:

3.

所以,我就找了一下其他的排行榜的内容作为例题:

链接:https://hellogithub.com/report/tiobe/

复制web网页中下述内容:

回到Jupyter Notebook:读取解析粘贴板中的内容,转换为一个DataFrame:

奇怪:

我明明复制了只是前10行的内容,为什么上述却是所有内容?

发现:确实是一个DataFrame:

2.2 访问查看某一列、某几列

1.

获取查看DataFrame的所有列名:

获取查看某一特定列的value:

也可以通过键值对的形式(字典),来访问某一特定列的value:

上述的某一列,它的本质是什么呢?

对,本质是上节介绍的Series序列。

2.

获取查看某几个特定列的value:通过多个列名来过滤,形成一个新的DataFrame:

如果,过滤的列名不存在原来的表格中时,那么Pandas就会自动的创建这个列名,并填充元素为空:

2.3 如何给新增加的列,全部赋值

1.

使用Python自己的range()函数:

其实,上述有30行内容,我只是截屏了前10条内容。

2.

使用Numpy库中的arange()函数:

看来,上述的两个函数,功能差不多。

3.

如果放进Series方法中,也可以:

比较的名正言顺:

2.4 如何给新增加的列,的指定元素赋值

当然是,index索引来指路:

三、深入理解Series和DataFrame

3.1 Series

1.

导包;

定义一个源数据,即Python中的字典。有三个key,每个key对应的value都是一个Python中的list;

data = {
    'Country':['Belgium','India','Brazil'],
    'Capital':['Brussels','New Delhi','Brasilia'],
    'Population':[11190846,1303171035,207847528]
}

基于上述源数据的字典,来创建一个Series:

由上述s1这个Series可知:

Series有两部分组成:

  • values:本质是Numpy库中的Array数组类型
  • index:就是默认的索引

2.

当然,上述的默认索引,是可以更改的:

3.2 DataFrame

1.

基于上述源数据的字典,来创建一个DataFrame:

由上可知:

  • Python的字典,可以顺滑转换为DataFrame
  • DataFrame的某一列,就是一个Series序列。即,DataFrame 由一竖竖Series来组成的

2.

在Python中,如果是一个generator生成器,那么就可以for循环来取出:即可以是一行一行的打印出来的。

发现:

  • 它是Python中的一个tuple元组型,且其内容由两部分组成:

tuple型
是Python中一种数据类型:元组。是list列表的”亲兄弟“,使用方法几乎相同。但是,两者区别是:

  • list列表,经常抛头露面,能随意的增删改查。 ------------------------------
  • tuple元组,只能查看,不能增删改。即,使数据写保护,更安全。------- 可视为不可变的list

在形式方面:

list列表:

tuple元组:

3.

既然有两部分组成,那就打印出来看看:

  • index+Series

由上可知:

DataFrame的一行行,刨除最前面的int编号,也是由Series来构成的。

3.3 由Series来创建DataFrame

1.

既然如此,那么能不能由Series来创建DataFrame呢?

  • 创建三个Series
  • 确实组成了一个新的DataFrame。

序列Series的values,本质上是数组Array。

2.问题:

这个新的DataFrame,跟原模板有出入:方向不对

解决:

转置一下:

3.

问题:新的DataFrame还缺少一个Column,即没有列名。
解决:

3.4 两者关系

Series:一维的数据结构,分为index、values两部分。

DataFrame:二维的数据结构。由多个Series组成。

从形式上看:

是不是两列的表格,就是Series,三列及以上的表格,就是DataFrame?

声明:Jerry's Blog|版权所有,违者必究|如未注明,均为原创|本网站采用BY-NC-SA协议进行授权

转载:转载请注明原文链接 - 3.1 第三章 Pandas入门:Pandas中的Series、DataFrame数据结构以及两者关系


Follow excellence, and success will chase you.