Pandas Series 数据结构详解:创建、索引与运算
本文详细介绍Pandas中Series数据的创建方法,包括通过数组、字典和标量实例化。深入讲解基于位置和标签的切片技巧,以及Series在算术运算中的自动标签对齐机制,帮助开发者高效处理一维数据。
一、Series 简介
Series 是一种类似于一维数组的对象,它由两部分组成:一组数据(可以是各种 NumPy 数据类型)和一组与之对应的数据标签(即索引)。即使只包含一组数据,也可以生成一个简单的 Series 对象。
从整体上看,Series 就是带有标签的一维数组,能够存储整数、浮点数、字符串以及 Python 对象等多种类型的数据。其标签轴通常被称为索引(index)。
二、实例化 Series
2.1 使用一维数组实例化
当使用一维数组来实例化 Series 时,索引的长度必须与数组长度保持一致。如果在创建时未指定索引,Pandas 会自动生成一个默认的数值型索引。
In [1]: s1 = pd.Series([1, 2, 3, 4])
Out[1]:
0 1
1 2
2 3
3 4
dtype: int64
In [2]: s2 = pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd'])
Out[2]:
a 1
b 2
c 3
d 4
dtype: int64需要注意的是,Pandas 支持重复索引。如果需要重置索引,具体操作方法将在后续章节中介绍。
2.2 使用字典实例化
在使用字典实例化 Series 时,如果未传入索引参数,则生成的索引值将直接取自字典的键(key)。
In [1]: pd.Series({'i': 0, 'j': 1, 'k': 2})
Out[1]:
i 0
j 1
k 2
dtype: int642.3 使用标量实例化
当使用标量值来实例化 Series 时,必须提供索引参数。此时,Series 会根据索引的长度重复该标量值。
In [1]: pd.Series(6, index=[0, 1, 2])
Out[1]:
0 6
1 6
2 6
dtype: int64三、Series 简单使用
3.1 为 Series 添加 Name 属性
在实例化 Series 时,可以通过传入 name 参数来为 Series 添加名称属性。此外,Series 也支持后续重命名操作。
In [1]: s = pd.Series(6, index=[0, 1, 2], name='six')
Out[1]:
0 6
1 6
2 6
Name: six, dtype: int64
In [2]: s.name
Out[2]: 'six'
In [3]: s = s.rename('sixsixsix')
In [4]: s.name
Out[4]: 'sixsixsix'3.2 基于位置的切片
Series 提供了类似于 Python 列表的切片方式,支持通过位置索引进行数据提取。
In[0]: s = pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd'])
In[1]: s[0:2] #取下标为0和1的两个数据(不包括2,也就是从第一个开始取,取两个数据)
Out[1]:
a 1
b 2
dtype: int64
In[2]: s[:3] #取前三个数据
Out[2]:
a 1
b 2
c 3
dtype: int64
In[3]: s[-2:] #取最后两个数据(也可以理解为从倒查第二个数据一直取到末尾)
Out[3]:
c 3
d 4
dtype: int64
In[4]: s[[0,2,3]] #取第1、3、4这个三个数据(注意下标是从0开始的,转换为位置时需+1)
Out[4]:
a 1
c 3
d 4
dtype: int64 #注意:如果输入的位置大于列表的长度则会报出“indexers are out-of-bounds”异常3.3 基于索引的切片
Series 允许使用索引标签的值来直接提取对应的数据。
In [0]:s = pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd'])
In [1]: s['a'] #提取s中,标签为a的值
Out[1]:
a 1
dtype: int64
In [1]: s[['a', 'b', 'c']] #提取s中,标签为a, b, c的值
Out[1]:
a 1
b 2
c 3
dtype: int64如果尝试访问的索引标签在 Series 的轴索引中不存在,将会引发 KeyError 异常。建议在这种情况下使用 Series 的 get 方法获取值;若标签不存在,该方法默认返回 None,同时可以通过设置 default 参数来指定不存在时的默认返回值。
In [0]: s = pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd'])
In [1]: s['f'] #提取s中,标签为f的值, f不存在,将会报出异常
Out[1]:KeyError
In [2]:s.get('f') #提取s中,标签为f的值, 若f不存在,默认返回None
Out[2]:None
In [3]:s.get('f'. default=-1) #提取s中,标签为f的值, 若f不存在,返回-1
Out[3]:-13.4 基于条件的切片
In[0]: s = pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd'])
In[1]: s[s < 2] #提取s中,小于2的值
Out[1]:
a 1
b 2
dtype: int64
In[1]: s[s> s.mean()] #提取s中,大于平均数的值
Out[1]:
c 3
d 4
dtype: int64
In[1]: s[s.between(1, 3, inclusive=False)] #提取s中,值介于1,3之间的数据(不包含1,3)
Out[1]:
b 2
dtype: int64在进行区间数据提取时,如果希望包含两端的边界值(即满足两端条件的值也被提取出来),只需将 inclusive 参数的值设置为 True。
3.5 其他操作
Series 无需编写循环,即可像操作单个数值一样快速进行数学运算。
In[0]: s = pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd'])
In[1]: s + s
Out[1]:
a 2
b 4
c 6
d 8
dtype: int64
In[2]: s - 1
Out[2]:
a 0
b 1
c 2
d 3
dtype: int64Series 之间的运算会自动基于标签对齐数据。如果某个 Series 中的标签在另一个 Series 中不存在,计算结果将显示为 NaN(缺失值),NaN 的处理方法将在后续章节讲解。因此,执行运算时无需刻意确保 Series 具有相同的标签。Pandas 数据结构集成的数据对齐功能,是 Pandas 区别于大多数其他标签型数据处理工具的重要特性。
In[0]: s1 = pd.Series([1, 2, 3, 4], index=['a', 'b', 'c', 'd'])
In[0]: s2 = pd.Series([3, 6, 11], index=['a', 'b', 'f'])
In[1]: s1 + s2
Out[1]:
a 4.0
b 8.0
c NaN
d NaN
f NaN
dtype: float64至此,关于 Pandas 数据结构中 Series 的使用介绍完毕。如需了解更多相关 Pandas Series 使用内容,请搜索本站历史文章或继续阅读后续相关文章,希望大家以后多多支持本站!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













