Pandas 中文手册

3.3 Series的索引与切片(核心操作,高效取值)

Pandas Series索引与切片完全指南:高效取值与筛选

Pandas 中文手册

本章节详细介绍Pandas Series的索引与切片操作,包括按标签索引(loc)、按位置索引(iloc)、布尔索引、切片差异以及多级索引入门,适合新手学习,提升数据处理效率。

推荐工具
PyCharm专业版开发必备

功能强大的Python IDE,提供智能代码补全、代码分析、调试和测试工具,提高Python开发效率。特别适合处理列表等数据结构的开发工作。

了解更多

Series的索引与切片:核心操作高效取值

引言

Pandas是一个强大的数据处理库,而Series是其基本数据结构之一,类似于一维数组。索引与切片是Series操作的核心,能高效地取值和筛选数据,是学习Pandas的必备技能。本章将逐一介绍各种索引方法,以简单易懂的方式帮助新人快速上手。

按标签索引(loc属性)

loc属性用于按索引标签(如字符串或日期)来访问Series中的数据。这是推荐的方法,因为它明确基于标签,不易出错。

语法和示例

  • 语法:Series.loc[label]Series.loc[list_of_labels]
  • 假设我们有一个Series:
    import pandas as pd
    s = pd.Series([10, 20, 30], index=['a', 'b', 'c'])
    print(s)
    # 输出:
    # a    10
    # b    20
    # c    30
    # dtype: int64
    
  • 按单个标签取值:
    value = s.loc['b']
    print(value)  # 输出:20
    
  • 按多个标签取值(返回新Series):
    values = s.loc[['a', 'c']]
    print(values)
    # 输出:
    # a    10
    # c    30
    # dtype: int64
    

注意:使用.loc时,如果标签不存在,会抛出KeyError错误,确保标签正确。

按位置索引(iloc属性)

iloc属性用于按整数位置(从0开始)来访问Series中的数据。这也是推荐的方法,特别适用于处理基于位置的索引。

语法和示例

  • 语法:Series.iloc[position]Series.iloc[list_of_positions]
  • 使用之前的Series示例:
    value = s.iloc[0]
    print(value)  # 输出:10(对应索引'a'的位置0)
    
  • 按多个位置取值:
    values = s.iloc[[0, 2]]
    print(values)
    # 输出:
    # a    10
    # c    30
    # dtype: int64
    

对比loc和iloc

  • loc基于标签,用于数据有明确标签时。
  • iloc基于位置,用于数据索引是整数或标签顺序固定时。
  • 两者都高效,但根据场景选择能避免混淆。

布尔索引(按条件筛选值)

布尔索引允许根据条件筛选Series中的数据,返回满足条件的元素。这是数据清洗和分析的常用技巧。

语法和示例

  • 语法:Series[condition],其中condition是布尔表达式或布尔数组。
  • 示例:筛选大于某个值的元素。
    filtered = s[s > 15]
    print(filtered)
    # 输出:
    # b    20
    # c    30
    # dtype: int64
    
  • 可以使用复杂条件:
    filtered = s[(s > 15) & (s < 30)]
    print(filtered)  # 输出:b    20
    

注意:布尔索引返回新Series,原数据不变。

切片操作:标签切片与位置切片的区别

切片用于连续地获取Series中的一段数据。Pandas支持标签切片和位置切片,但它们有重要区别。

标签切片(使用.loc)

  • 语法:Series.loc[start_label:end_label],其中start和end是索引标签。
  • 示例:
    slice_label = s.loc['a':'b']
    print(slice_label)
    # 输出:
    # a    10
    # b    20
    # dtype: int64
    
  • 注意:标签切片包含结束标签(即a到b,包括b)。

位置切片(使用.iloc)

  • 语法:Series.iloc[start_position:end_position],其中start和end是整数位置。
  • 示例:
    slice_position = s.iloc[0:2]  # 位置0到1(不包括2)
    print(slice_position)
    # 输出:
    # a    10
    # b    20
    # dtype: int64
    
  • 注意:位置切片遵循Python切片规则,即不包括结束位置(0:2返回位置0和1)。

区别总结

  • 标签切片包含结束标签,适合按标签顺序取值。
  • 位置切片不包含结束位置,适合按整数索引。
  • 混淆可能导致意外结果,因此推荐明确使用.loc或.iloc。

多级索引Series的索引方法(提前入门)

当Series有多个索引层级时(称为MultiIndex),索引方法略有不同,但仍可使用.loc和.iloc。

基本概念

  • MultiIndex允许在多个维度上组织数据,常见于复杂数据分析。
  • 示例创建一个多级索引Series:
    import pandas as pd
    arrays = [['A', 'A', 'B', 'B'], [1, 2, 1, 2]]
    index = pd.MultiIndex.from_arrays(arrays, names=['first', 'second'])
    s_multi = pd.Series([10, 20, 30, 40], index=index)
    print(s_multi)
    # 输出:
    # first  second
    # A      1         10
    #        2         20
    # B      1         30
    #        2         40
    # dtype: int64
    

索引方法

  • 按多层标签索引:使用.loc和元组指定所有层级。
    value = s_multi.loc[('A', 2)]
    print(value)  # 输出:20
    
  • 切片:类似单级索引,但可以指定每个层级的范围。
    slice_multi = s_multi.loc[('A', 1):('B', 2)]
    print(slice_multi)  # 返回'A'和'B'的所有数据
    

提示:多级索引更高级,本章仅作入门介绍,详细操作会在后续章节中深入。

总结

  • Series的索引与切片是Pandas数据处理的基础,掌握这些操作能显著提高效率。
  • 关键方法:
    • 按标签索引:使用.loc,基于索引标签。
    • 按位置索引:使用.iloc,基于整数位置。
    • 布尔索引:使用条件表达式筛选值。
    • 切片操作:区分标签切片(包含结束)和位置切片(不包含结束)。
    • 多级索引:通过MultiIndex扩展,支持复杂数据组织。
  • 实践建议:根据数据特点选择合适索引方法,避免混淆,多用示例练习巩固理解。

学习本教程后,你将能自信地使用Series进行高效取值和筛选,为深入学习Pandas打下坚实基础。

开发工具推荐
Python开发者工具包

包含虚拟环境管理、代码格式化、依赖管理、测试框架等Python开发全流程工具,提高开发效率。特别适合处理复杂数据结构和算法。

获取工具包