看过来
《pandas 教程》 持续更新中,提供建议、纠错、催更等加作者微信: gairuo123(备注:pandas教程)和关注公众号「盖若」ID: gairuo。跟作者学习,请进入 Python学习课程。欢迎关注作者出版的书籍:《深入浅出Pandas》 和 《Python之光》。
今天,我们来学习什么是 pandas 中的 Series。
pandas 最重要的数据结构是 DataFrame,DataFrame 是由行和列组成的二维数组。DataFrame 的原型是我们生活中最常见的电子表格,每一行是一条数据,一个列代表着这一行数据的一个属性,比如下图的姓名(Name)、年龄(Age)还有性别(Sex)。
组成 DataFrame 的结构是由每一列的 series 来组成的,每一列都是由相同索引的 Series 组成。下图的概念图中,有四列 series。
接下来我们看一下 series 的基本结构。我们这里呢有一个 Series 抽象图:
我们把 Series 进行解剖,可以看到 Series 的索引(深灰色部分)和后面它的真实取值。每一个 Series 是由这两部分组成:索引和取值。索引中的每一个值我们可以叫做标签。
我们构造一个非常简单的 Series,首先导入 pandas 库,我们按照习惯呢给它起别名 pd,然后 pd.Series() 中传入一个列表,得到一个 Series,起名为 ser(Series 的前三个字母)。
import pandas as pd
ser = pd.Series([1, 2, 3, 4])
ser
'''
0 1
1 2
2 3
3 4
dtype: int64
'''
输出 ser 可以看到 Series 具体的内容,我们可以看到 ser 这个数据有两个信息:索引和取值。
它的索引里面的标签分别是 0、1、2、3,这是由于我们没有指定索引,它给我们默认的给了一个从零开始的索引。
另外一个是值,是我们指定的具体的值,是 1、2、3、4。最下边是它的 dtype,是这个 Series 的数据类型。这个数据的类型是指它的值的数据类型,并非它的索引的类型,在这里取值都是整型,因此自动识别为 int64 类型。
接下来我们再构造了一个 Series,这次我们给了一个 index 索引我们赋值为 a、b、c、d。
ser = pd.Series([1, 2, 3, 4],
index=['a', 'b', 'c', 'd'])
ser
'''
a 1
b 2
c 3
d 4
dtype: int64
'''
可以看到 Series 这时它所有的标签呢变为了 abcd。
接下来我们给 Series 给一个 name 参数,打印我们构造的 Series 可以看到它的基础信息里面多了一个 name:
ser = pd.Series([1, 2, 3, 4],
index=['a', 'b', 'c', 'd'],
name='age'
)
ser
'''
a 1
b 2
c 3
d 4
Name: age, dtype: int64
'''
这个 name 是这个 Series 的名称,如果说这个 Series 组成了一个 DataFrame 那它的列名会是这个 age。后面讲到 DataFrame 相关内容时会涉及到。
除了上面的三个参数之外呢我们这次增加一个参数叫做 dtype。指定 dtype 后将数据类型转化为 string:
ser = pd.Series([1, 2, 3, 4],
index=['a', 'b', 'c', 'd'],
name='age',
dtype='str'
)
ser
'''
a 1
b 2
c 3
d 4
Name: age, dtype: object
'''
我们看到 dtype 显示为 object,object 是一个比较混杂的数据类型,一般会把 string 类型去转成 object 类型。当然,pandas 已经提供了一个专门的 string 类型,我们后面会讲到。
我们可以将 dtype 转换为浮点类型:
ser = pd.Series([1, 2, 3, 4],
index=['a', 'b', 'c', 'd'],
name='age',
dtype='float'
)
ser
'''
a 1.0
b 2.0
c 3.0
d 4.0
Name: age, dtype: float64
'''
可以看到 dtype 变为了浮点类型,按照浮点类型的字面量的规则,取值已经有一个小数点,当然小数点后面都是零。
以上的 Series 的相关的信息是怎么去获取的呢?我们可以去访问它的一些属性,来获得我们之前设置的这些信息。
比如说我们在获取它的索引的时候呢可以用 .index
:
ser.index
# Index(['a', 'b', 'c', 'd'], dtype='object')
这时我们可以看到有一个 index 对象。index 它是索引对象,它也有数据类型。由于它和所有值是一个个字符串,因此类型是 object。
访问 Series 的 values 呢可以看到它的一个具体的值,它给我们返回了一个 NumPy 中 ndarray 类型的数据。
ser.values
# array([1., 2., 3., 4.])
可以看到它的每一个元素呢是浮点类型。
同时,我们还可以看到它的名称,即 name,这个 name 是我们先前设置的。
ser.name
# 'age'
我们还可以看到它的数据类型,这个数据类型呢是 Series 的值的数据类型。我们可以用 dtype:
ser.dtype
# dtype('float64')
type(ser.dtype)
# numpy.dtype[float64]
我们可以看到它是一个专门的类型,是 NumPy 中用来表示数据类型的对象,这个对象这显示当前 Series 的数据类型的是 float64。
接下来将 Series 转换为 Python 的原生数据类型。将这个 Series 转化为列表:
list(ser)
# [1.0, 2.0, 3.0, 4.0]
将 series 转化为列表呢是将它的 values 它的值转化为一个列表。
我们试图将 series 转化为一个字典:
dict(ser)
# {'a': 1.0, 'b': 2.0, 'c': 3.0, 'd': 4.0}
可以看到它的字典形式是它的对应的索引上的标签,以及它对应的值组成的键值对。
那我们把 series 呢转化为我们的集合类型:
set(ser)
# {1.0, 2.0, 3.0, 4.0}
值成为集合的元素。
我们还可以看一下它的 array 形式:
ser.array
'''
<PandasArray>
[1.0, 2.0, 3.0, 4.0]
Length: 4, dtype: float64
'''
这里的 PandasArray 类型是 pandas 自身的构造的一个对象类型,目前比较少使用。
我们还可以看到这个 Series 的长度:
len(ser)
# 4
它还有一个 size 属性,指的它的长度或者说它的值的数量:
ser.size
# 4
这个和 len 相同。
关于 Series 的基本介绍我们就讲到这儿,后面呢我们会介绍 pandas 中 Series 更多的一些方法。
更新时间:Sept. 20, 2022, 9:38 a.m. 标签:pandas series 结构 属性