查看全课大纲(第 37 / 101 节)
  1. 1.数据分析基本概念
  2. 2.学习数据分析的一般路线
  3. 3.数据分析的流程
  4. 4.数据类型
  5. 5.环境部署(1)
  6. 6.环境部署(2)
  7. 7.课程介绍
  8. 8.TXT文件操作
  9. 9.JSON文件操作
  10. 10.CSV文件操作
  11. 11.Excel文件操作
  12. 12.数据库及SQL常用语法
  13. 13.数据库基本操作
  14. 14.数据库多表连接
  15. 15.实战:欧洲职业足球数据库分析
  16. 16.爬虫简介
  17. 17.URL管理模块
  18. 18.网页下载模块
  19. 19.网页解析模块(1)
  20. 20.网页解析模块(2)
  21. 21.Scrapy简介
  22. 22.Scrapy使用步骤(1)
  23. 23.Scrapy使用步骤(2)
  24. 24.Scrapy使用步骤(3)
  25. 25.Scrapy使用步骤(4)
  26. 26.实战:获取国内城市空气质量指数数据
  27. 27.NumPy和SciPy介绍
  28. 28.多维数组
  29. 29.多维数组操作
  30. 30.NumPy的常用方法
  31. 31.向量化介绍
  32. 32.向量化及通用函数
  33. 33.实战:2016美国大选分析
  34. 34.数据结构-Series
  35. 35.数据结构-DataFrame
  36. 36.数据结构-Index
  37. 37.Series的索引操作
  38. 38.DataFrame的索引操作
  39. 39.索引操作总结
  40. 40.运算与对齐
  41. 41.函数应用操作(1) -- map
  42. 42.函数应用操作 (2) -- apply applymap
  43. 43.文件读写操作
  44. 44.排序操作
  45. 45.数据清洗--处理缺失数据
  46. 46.数据清洗--处理重复数据
  47. 47.数据清洗--替换数据
  48. 48.常用统计方法(1) -- describe quantile
  49. 49.常用统计方法(2) -- sum mean median count
  50. 50.常用统计方法(3) -- max min idxmax idxmin
  51. 51.常用统计方法(4) -- mad var std cumsum
  52. 52.实战:全球食品数据分析
  53. 53.层级索引
  54. 54.分组与聚合介绍
  55. 55.分组操作(1) -- GroupBy对象及常用聚合操作
  56. 56.分组操作(2) -- 自定义分组及聚合操作
  57. 57.透视表介绍
  58. 58.透视表操作
  59. 59.数据规整(1) -- 数据合并concat
  60. 60.数据规整(2) -- 数据连接merge
  61. 61.数据重构(3) -- 数据重构stack unstack
  62. 62.实战:互联网电影资料库分析
  63. 63.探索性数据分析EDA介绍
  64. 64.EDA的目的
  65. 65.EDA常用工具
  66. 66.Matplotlib绘图基本介绍
  67. 67.Matplotlib画布
  68. 68.散点图和柱状图的绘制
  69. 69.直方图的绘制
  70. 70.矩阵绘图
  71. 71.子图的使用
  72. 72.Matplotlib颜色、标记、线型
  73. 73.Matplotlib坐标刻度、标签、图例、标题
  74. 74.Seaborn介绍
  75. 75.数据集分布可视化(1) -- 单变量分布、双变量分布
  76. 76.数据集分布可视化(2) -- 变量关系可视化
  77. 77.类别数据可视化 -- 类别散布图、类别内数据分布、类别内统计图
  78. 78.交互式数据可视化工具Bokeh介绍
  79. 79.Bokeh绘制散点图、柱状图、盒子图、弦图
  80. 80.Bokeh绘制常用图形元素
  81. 81.3D绘图 -- mplot3d
  82. 82.3D曲线可视化
  83. 83.3D散点图可视化
  84. 84.3D柱状图可视化
  85. 85.Pandas绘图
  86. 86.实战:Lending Club借贷数据探索性分析及可视化
  87. 87.机器学习介绍及应用场景
  88. 88.机器学习建模介绍 (1) -- 分类
  89. 89.机器学习建模介绍 (2) -- 回归
  90. 90.机器学习建模介绍 (3) -- 聚类
  91. 91.机器学习分类
  92. 92.机器学习工具scikit-learn
  93. 93.使用scikit-learn的流程
  94. 94.数据集准备及划分
  95. 95.模型选择
  96. 96.数据预处理及特征工程
  97. 97.过拟合与欠拟合
  98. 98.模型调参介绍
  99. 99.模型调参方法
  100. 100.模型测试及评价
  101. 101.实战:通过移动设备行为数据预测性别和年龄

Series的索引操作

约 7 分钟

📺 正在播放小象学院官方高清录播(支持倍速与清晰度调节)

小象实战讲义 · Python数据分析实战

在上一节中,我们学习了Pandas的三个核心数据结构:Series、DataFrame和Index。你已经掌握了如何通过索引获取单个数据。本节我们将深入探讨Series的索引操作,学习如何获取连续的数据片段,甚至是不连续的数据点,从而实现灵活的数据筛选。

💡 核心导读

  • 行索引回顾:用标签名访问单个元素、用 .iloc[] 按整数位置访问。
  • 切片索引:获取连续的数据片段,理解按位置切片与按标签切片的关键区别。
  • 不连续索引:通过列表同时获取多个不连续的数据点。
  • 代码实践:通过独立、可运行的代码块,亲手验证每种索引方式的结果。

行索引快速回顾

我们已经知道,可以通过方括号 [] 对Series进行索引。pandas 3.0 起 [] 已统一为「只按标签查找」,因此访问单个元素的方式是:

  1. 使用索引标签(label):传入与索引对应的字符串。
  2. 按整数位置(position)访问:请使用 .iloc[]——旧版 pandas 中 s[整数] 会”回退”到位置查找,pandas 3.0 起已移除该回退,字符串索引下 s[1] 会抛 KeyError(上一节已实测演示)。

对应地:.loc[] 用于标签索引,.iloc[] 用于整数位置索引。在代码中显式使用 .loc 和 .iloc,是意图最清晰、也不会踩版本坑的写法。

让我们通过代码快速回顾并构建本节的基础示例数据。

import pandas as pd
import numpy as np

# 构建一个示例Series
# 数据为0,1,2,3,4,对应的索引标签为'a','b','c','d','e'
ser_obj = pd.Series(range(5), index=['a', 'b', 'c', 'd', 'e'])
print("原始Series:")
print(ser_obj)
原始Series:
a    0
b    1
c    2
d    3
e    4
dtype: int64

切片索引:获取连续数据

切片索引允许我们获取Series中一段连续的数据,类似于Python列表的切片操作。其语法为 ser_obj[start:stop]。

按整数位置切片

当 start 和 stop 是整数时,其行为与Python列表完全一致:包含起始位置,不包含结束位置。(注意一个容易混淆的边界:整数切片 s[1:3] 在 pandas 3.0 中仍然按位置处理;被移除位置回退的是标量整数查找 s[1] 和整数列表 s[[0,2]]。)

import pandas as pd

# 重新构建示例Series,确保代码块独立
ser_obj = pd.Series(range(5), index=['a', 'b', 'c', 'd', 'e'])

# 按整数位置切片:从位置1开始,到位置3之前结束(即位置1和2)
slice_by_pos = ser_obj[1:3]
print("按位置切片 ser_obj[1:3]:")
print(slice_by_pos)
print("\n等价于使用 .iloc[1:3]:")
print(ser_obj.iloc[1:3])
按位置切片 ser_obj[1:3]:
b    1
c    2
dtype: int64

等价于使用 .iloc[1:3]:
b    1
c    2
dtype: int64

结果包含了索引 'b'(位置1)和 'c'(位置2),但不包含 'd'(位置3)。

按索引标签切片

当 start 和 stop 是索引标签字符串时,Pandas的切片行为有一个重要区别:它同时包含起始标签和终止标签。

import pandas as pd

# 重新构建示例Series
ser_obj = pd.Series(range(5), index=['a', 'b', 'c', 'd', 'e'])

# 按索引标签切片:从标签'b'开始,到标签'd'结束
slice_by_label = ser_obj['b':'d']
print("按标签切片 ser_obj['b':'d']:")
print(slice_by_label)
print("\n等价于使用 .loc['b':'d']:")
print(ser_obj.loc['b':'d'])
按标签切片 ser_obj['b':'d']:
b    1
c    2
d    3
dtype: int64

等价于使用 .loc['b':'d']:
b    1
c    2
d    3
dtype: int64

可以看到,结果包含了 'b'、'c' 和 'd' 三个标签对应的数据。这是与按位置切片最核心的不同点,务必牢记。

不连续索引:获取多个指定数据

有时我们需要获取的数据点不是连续的,而是分散的。这时,可以在方括号 [] 内传入一个列表(list)——但列表元素应是索引标签(pandas 3.0 起 [] 只按标签查找,整数列表不再回退为位置,按位置取多个点请用 .iloc[[..]],本节代码就是这么写的)。

import pandas as pd

# 重新构建示例Series
ser_obj = pd.Series(range(5), index=['a', 'b', 'c', 'd', 'e'])

# 1. 使用整数位置列表进行不连续索引
pos_index_result = ser_obj.iloc[[0, 2, 4]] # 使用.iloc访问器按位置列表索引
print("使用位置列表 ser_obj.iloc[[0, 2, 4]]:")
print(pos_index_result)

# 2. 使用索引标签列表进行不连续索引
label_index_result = ser_obj[['b', 'd']] # 直接使用标签列表索引
print("\n使用标签列表 ser_obj[['b', 'd']]:")
print(label_index_result)
使用位置列表 ser_obj.iloc[[0, 2, 4]]:
a    0
c    2
e    4
dtype: int64

使用标签列表 ser_obj[['b', 'd']]:
b    1
d    3
dtype: int64

通过列表索引,我们成功地跳着取出了位置0、2、4(标签a、c、e)的数据,以及标签b和d的数据。

📝 动手练一练

  1. 概念辨析:对于同一个Series ser = pd.Series([10, 20, 30, 40], index=['w', 'x', 'y', 'z']),表达式 ser['x':'y'] 和 ser[1:3] 返回的结果分别是什么?它们包含的数据项数量相同吗?为什么?
👉 点击查看参考答案

ser['x':'y'] 返回的是标签从 'x' 到 'y'(包含两端)的数据,即 [20, 30],对应索引 ['x', 'y']。 ser[1:3] 返回的是位置从1到3(不包含3)的数据,即 [20, 30],对应索引 ['x', 'y']。 在这个特定例子中,它们返回的数据项数量相同(都是2个),但原因不同。前者是因为标签切片包含终止标签,恰好'x'和'y'是相邻标签;后者是因为位置切片不包含终止位置。如果Series的索引不是连续字母或顺序不同,两者的结果就可能完全不同。

  1. 代码实践:创建一个关于水果价格的Series:price = pd.Series([3.5, 2.8, 4.2, 5.0, 3.0], index=['苹果', '香蕉', '橙子', '葡萄', '芒果'])。请使用不连续索引,一次性取出“香蕉”、“葡萄”和“芒果”的价格。分别用标签列表和位置列表两种方式实现。
👉 点击查看参考答案
import pandas as pd
price = pd.Series([3.5, 2.8, 4.2, 5.0, 3.0], index=['苹果', '香蕉', '橙子', '葡萄', '芒果'])

# 方法1:使用标签列表
selected_by_label = price[['香蕉', '葡萄', '芒果']]
print("使用标签列表选取:")
print(selected_by_label)

# 方法2:使用位置列表(香蕉在位置1,葡萄在3,芒果在4)
selected_by_pos = price.iloc[[1, 3, 4]]
print("\n使用位置列表选取:")
print(selected_by_pos)
使用标签列表选取:
香蕉    2.8
葡萄    5.0
芒果    3.0
dtype: float64

使用位置列表选取:
香蕉    2.8
葡萄    5.0
芒果    3.0
dtype: float64

本章小结

本节我们深入学习了Series的三种索引操作,这是灵活操作Pandas数据的基石。

📋 行动清单

  • 掌握切片的核心区别:亲口复述“按位置切片不包含结束位,按标签切片包含结束位”。
  • 独立运行示例代码:在Jupyter Notebook或Python脚本中,亲手输入并运行本节的所有代码块,观察输出,确保理解。
  • 尝试改编:将示例中的数据和索引标签换成你自己设想的一组数据(如城市与温度、月份与销售额),再次练习三种索引操作。

—— 小象教研组

配套资料 · 直接下载

课件、代码、数据集等配套资料全部免费,点击即可直接下载,无需分享或解锁。

  • 本节课件:Series的索引操作
    PDF · 228KB
    下载
  • 全套课件打包(第1-5章)
    ZIP · 12.8MB
    下载
  • 全套课件打包(第6-8章)
    ZIP · 15MB
    下载
  • 实战数据集:AppleStore 应用商城分析
    ZIP · 329KB
    下载
  • 实战数据集:女性服装电商分析
    ZIP · 2.8MB
    下载
  • Python 数据分析环境搭建指南
    PDF · 2MB
    下载
  • Scrapy 安装教程
    PDF · 12.7MB
    下载
  • 附加实战项目:AppleStore 应用商城数据分析
    ZIP · 0.3MB · ipynb + CSV 数据
    下载
  • 附加实战项目:银行电话营销数据分析
    ZIP · 0.4MB · ipynb + CSV 数据
    下载
  • 附加实战项目:女性服装电商评论数据分析
    ZIP · 2.7MB · ipynb + CSV 数据
    下载
  • 附加实战项目:美国化学学会杂志数据分析
    ZIP · 34.2MB · ipynb + SQLite 数据库
    下载