
2.1 Pandas的两大数据结构
2.1.1 初识Pandas
首先,我们从Pandas的核心数据结构讲起。Pandas主要有两种类型的数据结构,分别是Series和DataFrame。这两种数据结构像两个可塑性极强的容器,能把遇到的各类数据都装进去,并按照容器的规则对数据进行高效处理。
为了便于理解,这里拿Excel表格来做类比,如表2-1所示。
表2-1 Excel类比样例表

Series可以看作表中的某一列,这里的语文、数学、英语成绩对应的列都是一个Series。DataFrame则是整张数据表,由多列构成。Pandas的几乎所有操作都是基于这些列和表进行的。下面分别认识一下Series和DataFrame。
2.1.2 Series和DataFrame
1.表格的三要素
Series和DataFrame的存在是为了更有效率地容纳和处理数据。实际应用中,我们遇到的大部分数据是以表格形式存在的,而在处理的时候往往以列的方式来进行。
在介绍如何创建数据之前,先明确表格的基本要素,能够帮助我们更好地理解Series和DataFrame的特征与原理,知其然并知其所以然,更快地抓住重点。
想象一下,现在有一张数据表,我们需要知道哪些基本信息才能随心所欲地操作它?
1)想要自由地操作任意一列数据,首先要知道每一列数据叫什么,即列名。
2)知道数据的总行数及每一行对应的序号也很重要,毕竟处理10条数据与处理100万条数据需要的资源和工具是不一样的。
3)知道表格里的每个值具体是多少,这对于我们的统计分析结果来说至关重要。
总结一下,表格的三要素如下。
❑列名(column):对应着列名,指定操作哪列数据。
❑索引(index):代表索引,告诉我们有多少行数据,索引默认从0开始。
❑值(value):指代具体的数据值。
这3个基本要素贯穿Pandas数据分析的始终,作用是让我们更加灵活地处理和分析数据。
接下来我们动手在Pandas中尝试创建数据。
2.创建DataFrame和Series
如果想在Pandas中创建一张如表2-2所示的表,应该如何操作?
表2-2 创建表样例

Pandas操作的第一步一定是导入库,命令为:import pandas as pd。
创建DataFrame最常用的方式是字典+列表,语句很简单,先用花括号{}创建一个字典,然后在其中依次输入每一列的列名及其对应的列值(此处一定要用列表)。这里对应关系重要,列的顺序并不重要。代码示例如下:

运行结果如下:

上面代码的结果对应到Excel表格中,如图2-1所示。值得注意的是,如果我们在创建时不指定index参数,系统会自动生成从0开始的索引。

图2-1 表格三要素样例
还可以通过改变索引、列名和值来控制数据,这和前文讲的表格三要素——列名、索引、值是对应的。
对于Series的创建,在创建好DataFrame之后选择对应的列即可。在上述实例中,选择刚创建好的df1中的工资列作为新的Series:

运行结果如下:

也可以通过指定值和索引的方式来单独创建一列:

运行结果如下:


DataFrame和Series的创建非常便捷,不过在实际运用中,单独创建数据的场景较少,更多是直接读取现有数据源。