Python中Series常用方法有哪些

来源:站长素材作者:重启一下头衔:草根站长
导读:本期聚焦于重启一下创作的《Python中Series常用方法有哪些》,敬请观看详情。Series是pandas库中的核心一维数据结构,在Python数据分析场景中应用十分广泛。很多刚接触pandas的用户不清楚Series有哪些常用方法,也不知道这些方法的具体使用场景。本文整理了Series的基础操作方法,包括数据查看、索引操作、数据统计、缺失值处理等常见功能,同时搭配对应的代码示例帮助理解。掌握这些方法能提升日常数据处理的效率,让你更顺畅地完成一维数据的各类操作需求,适合刚入门Python数据分析的开发者参考学习。

Series 是 pandas 库中专门用于表示一维带标签数组的核心数据结构。它由索引和数据两个部分组成,既可以通过从 0 开始的位置索引访问元素,也可以使用自定义的标签索引定位数据。在数据清洗、特征提取和统计分析等场景中,Series 承担着非常基础且高频的角色,掌握其常用方法可以显著提升处理结构化数据的效率。

Python中Series常用方法有哪些

Series基础属性查看方法

创建 Series 对象后,最先需要做的是了解数据的基本规模、类型和索引结构。pandas 为 Series 提供了一组轻量级的属性访问接口,使用这些属性不会改变数据本身,而是返回当前对象的元信息。常见的属性包括 valuesindexdtypeshapename。其中 values 以 NumPy 数组的形式暴露底层数据,方便与其他科学计算库交互;index 返回索引对象,可用于检查索引标签是否规范。

dtype 描述的是 Series 中元素的数据类型,通常由 pandas 自动推断,也能在创建时通过 dtype 参数指定。对于包含整数、浮点数或字符串的 Series,dtype 会分别返回 int64float64object 等类型信息。shape 属性返回一个元组,由于 Series 是一维结构,其长度通常以 (n,) 的形式呈现。name 属性则用于标识 Series 本身的名称,在 DataFrame 中由某一列转换而来时,该名称通常会自动继承自列名,便于后续合并或分组时识别来源。

下面通过一个完整的示例演示这些属性的使用方式。示例中创建了一个带有自定义索引和名称的 Series,并依次输出数据部分、索引对象、数据类型、形状以及名称。这样的检查通常放在数据读取之后,用于快速确认数据结构是否符合预期。

import pandas as pd
import numpy as np

s = pd.Series([10, 20, 30, 40], index=['a', 'b', 'c', 'd'], name='score')
print(s.values)
print(s.index)
print(s.dtype)
print(s.shape)
print(s.name)

Series索引相关方法

基础索引访问

Series 提供了非常灵活的索引访问机制。最基本的访问方式可以分为基于位置的整数索引和基于标签的索引。位置索引从 0 开始,行为与 Python 列表类似;标签索引则根据 index 中定义的标签进行查找,即使标签不是整数也可以直接使用。例如,对于索引为 ['a', 'b', 'c', 'd'] 的 Series,使用 s['b'] 可以获取标签对应的值,而使用 s[1] 则返回位置 1 上的元素。

切片操作也同时支持两种语义。位置切片遵循 Python 原生规则,左闭右开,即包含起始位置但不包含结束位置;标签切片则是左右均闭合,会把结束标签对应的数据也包含进来。这种差异在使用数值型索引或字符型索引时需要特别留意,避免因切片边界理解不同而取到多余或遗漏的数据。

以下示例展示了位置索引、标签索引以及位置切片和标签切片的用法。对于初学者来说,建议在交互式环境中分别执行这几行代码,观察不同类型索引的返回结果。

import pandas as pd

s = pd.Series([10, 20, 30, 40], index=['a', 'b', 'c', 'd'])
print(s[0])
print(s['b'])
print(s[1:3])
print(s['b':'d'])

索引修改与重置

在数据处理过程中,索引并不是一成不变的。有时需要批量替换原有的索引标签,使数据更符合后续合并或展示的需求。Series 允许直接对 index 属性进行赋值,从而一步完成索引替换。例如,把 ['a', 'b', 'c'] 修改为 ['x', 'y', 'z'],数据本身不会发生变化,只是访问标签随之改变。

另一种更灵活的方式是使用 reindex() 方法。该方法可以基于新的索引顺序重新排列数据,如果新索引中包含原 Series 不存在的标签,那么这些位置会自动填充为 NaN。这一特性在合并多个 Series 或对齐不同数据来源时非常有用。通过 reindex() 还可以配合 fill_value 参数来指定缺失位置的替代值,但最基本的用法已经能够满足常见的索引重建需求。

下面的示例首先直接为 Series 赋予新的索引,然后调用 reindex() 扩展索引范围。新增的 'm' 标签在原数据中不存在,因此对应位置结果会显示为 NaN

import pandas as pd
import numpy as np

s = pd.Series([10, 20, 30], index=['a', 'b', 'c'])
s.index = ['x', 'y', 'z']
print(s)
new_s = s.reindex(['x', 'y', 'z', 'm'])
print(new_s)

Series数据统计方法

pandas 为 Series 内置了大量统计计算方法,能够直接完成常见的汇总分析。无需手动编写循环或调用复杂的数学库,就可以获得求和、均值、最值、标准差等指标。这些方法通常忽略 NaN 值,以保证在有缺失数据的情况下仍能返回有效结果。例如 sum() 会把所有非缺失元素相加,mean() 计算非缺失元素的均值,max()min() 则分别返回最大值和最小值。

除了单一统计量之外,describe() 是一种非常便捷的摘要方法。它会一次性返回计数、平均值、标准差、最小值、四分位数以及最大值等信息。对于数值型 Series,这些指标可以快速帮助分析数据的分布范围和离散程度。若数据中存在较多异常值,通过观察摘要中的分位数和标准差,往往能及时发现数据质量问题。

下面的表格列出了 Series 中常见的统计方法及其作用,后续代码示例会对其中几个方法进行演示。需要注意的是,这些方法返回的是标量或摘要对象,可以直接用于打印输出或存入报告。

方法名功能说明
sum()计算所有元素的总和
mean()计算所有元素的均值
max()返回最大值
min()返回最小值
count()返回非缺失值的数量
std()计算标准差
var()计算方差
describe()返回包含计数、均值、标准差、分位数等信息的统计摘要
import pandas as pd
import numpy as np

s = pd.Series([10, 20, 30, 40, 50])
print(s.sum())
print(s.mean())
print(s.max())
print(s.min())
print(s.describe())

Series缺失值处理方法

现实数据中缺失值是不可避免的,Series 针对 NaN 类型的缺失值提供了一整套检测和处理方法。检测类方法包括 isnull()notnull(),它们都会返回一个布尔类型的 Series,长度与原 Series 相同。当原位置是缺失值时,isnull() 的对应位置为 True,而 notnull() 则相反。通过这些布尔结果可以快速定位缺失数据的位置,也可以作为过滤条件提取有效数据。

处理缺失值最直接的方式是 dropna(),它会删除所有包含 NaN 的元素,返回一个不包含缺失值的 Series。若要保留数据长度,则可以使用 fillna() 方法,用指定的标量值来替换所有缺失项。填充值的选择取决于业务背景,例如在考试成绩中可以用 0 填充缺考记录,在气温数据中则可能用均值或前向值填充更为合适。

以下示例构造了一个包含两个缺失值的 Series,并依次展示了

import pandas as pd
import numpy as np

s = pd.Series([5, np.nan, 12, np.nan, 8])
print(s.isnull())
print(s.notnull())
print(s.dropna())
print(s.fillna(0))
print(s.fillna(s.mean()))

从上到下依次演示了缺失值检测、删除和填充。其中 isnull() 返回的布尔序列可以直接作为过滤条件,例如 s[s.notnull()]s.dropna() 的效果相同。fillna(0) 采用固定值填充,而 fillna(s.mean()) 则使用非缺失部分的均值进行填充。对于有顺序关系的数据,还可以使用 s.ffill()s.bfill() 进行前向填充和后向填充,这比统一用固定值更符合时间序列的变化逻辑。

索引、切片与布尔筛选

Series 同时支持基于标签和基于整数位置的访问方式。loc 按标签查找,并且切片时包含右端点;iloc 按整数位置查找,切片时遵循 Python 的左闭右开规则。这种区分在自定义索引后会变得非常重要。

import pandas as pd

s = pd.Series([10, 20, 30, 40], index=['a', 'b', 'c', 'd'])
print(s.loc['b':'d'])
print(s.iloc[1:3])
print(s[s > 20])

布尔筛选适合按条件提取子集,例如 s[s > 20] 返回所有大于 20 的元素。多个条件组合时需要用括号包裹每个条件,并使用 &| 等位运算符。

向量化运算与索引对齐

Series 支持向量化运算,无需遍历即可对全部元素执行算术操作。标量与 Series 运算会广播到每个元素,两个 Series 运算时则按索引对齐,只有索引相同的元素才会参与计算。

import pandas as pd

s = pd.Series([1, 2, 3], index=['x', 'y', 'z'])
t = pd.Series([10, 20, 30], index=['y', 'z', 'w'])
print(s * 2)
print(s + t)

s * 2 会将每个元素乘以 2,而 s + t 只在共同的索引 yz 上完成加法,xw 处的结果为 NaN。这种索引对齐机制能有效防止数据错位,也是 Pandas 与 NumPy 普通数组的重要区别。

排序、去重与频次统计

在数据探索阶段,经常需要查看数据的分布情况。Series 提供了 sort_values()drop_duplicates()value_counts() 等方法来完成排序、去重和频次统计。

import pandas as pd

s = pd.Series(['apple', 'banana', 'apple', 'pear', 'banana', 'apple'])
print(s.value_counts())
print(s.drop_duplicates())
print(s.sort_values())

value_counts() 返回每个唯一值出现的次数,默认按频次降序排列;drop_duplicates() 保留首次出现的唯一值;sort_values() 则按元素值排序。如果需要按索引排序,可以使用 sort_index()

map 与 apply 的应用

map() 适合根据字典或函数将 Series 中的每个元素映射为新值,常用于类别编码和值替换。apply() 则可以应用更灵活的自定义函数。

import pandas as pd

s = pd.Series(['cat', 'dog', 'bird'])
mapping = {'cat': '猫', 'dog': '狗', 'bird': '鸟'}
print(s.map(mapping))
print(s.apply(lambda x: len(x)))

示例中 map() 通过字典实现了英文到中文的映射,apply() 则计算了每个元素的字符串长度。对于较复杂的逐元素变换,apply() 提供了更高的自由度;而对于简单的值替换,map() 更加简洁直观。

常见转换操作

Series 可以方便地在列表、字典和 DataFrame 之间转换,以便与外部代码交互或进入后续分析流程。

import pandas as pd

s = pd.Series([10, 20, 30], index=['a', 'b', 'c'])
print(s.to_list())
print(s.to_dict())
print(s.to_frame(name='value'))

to_list() 将值转换为 Python 列表,索引信息会丢失;to_dict() 将索引和值转换为字典;to_frame() 则将 Series 转换为 DataFrame,原索引成为行索引,name 参数用于指定列名。这些方法在数据导出和结果输出时非常实用。

总结

本文围绕 Pandas Series 介绍了从统计摘要、缺失值处理,到索引切片、向量化运算、排序去重、映射转换等常用操作。Series 作为一维带标签数组,既具备 NumPy 数组的向量化能力,又拥有灵活的索引对齐和缺失值处理机制,是数据清洗和特征工程中非常基础且高效的结构。掌握 Series 的用法之后,再学习 DataFrame 会更加顺畅,因为 DataFrame 可以理解为由多个共享索引的 Series 组成的二维表结构。在日常使用中,优先选择向量化操作而不是手动循环,往往能显著提升代码的可读性和运行效率。

PythonSeriespandas数据处理数据结构修改时间:2026-07-16 20:48:36

免责声明:​ 已尽一切努力确保本网站所含信息的准确性。网站内容多为原创整理与精心编撰,观点力求客观中立。本站旨在免费分享,内容仅供个人学习、研究或参考使用。若引用了第三方作品,版权归原作者所有。如内容涉及您的权益,请联系我们处理。
内容垂直聚焦
专注技术核心技术栏目,确保每篇文章深度聚焦于实用技能。从代码技巧到架构设计,为用户提供无干扰的纯技术知识沉淀,精准满足专业提升需求。
知识结构清晰
覆盖从开发到部署的全链路。AI、前端、编程、数据库、服务器、建站、系统层层递进,构建清晰学习路径,帮助用户系统化掌握开发与运维所需的核心技术。
深度技术解析
拒绝泛泛而谈,深入技术细节与实践难点。无论是数据库优化还是服务器配置,均结合真实场景与代码示例进行剖析,致力于提供可直接应用于工作的解决方案。
专业领域覆盖
精准对应开发生命周期。从前端界面到后端编程,从数据库操作到服务器运维,形成完整闭环,一站式满足全栈工程师和运维人员的技术需求。
即学即用高效
内容强调实操性,步骤清晰、代码完整。用户可根据教程直接复现和应用于自身项目,显著缩短从学习到实践的距离,快速解决开发中的具体问题。
持续更新保障
专注既定技术方向进行长期、稳定的内容输出。确保各栏目技术文章持续更新迭代,紧跟主流技术发展趋势,为用户提供经久不衰的学习价值。