← 返回《Python 数据分析实战》
📑 查看全课大纲(第 34 / 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.D绘图 -- mplot3d
  82. 82.D曲线可视化
  83. 83.D散点图可视化
  84. 84.D柱状图可视化
  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

约 18 分钟

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

Pandas 一维核心容器:Series 数据结构与索引机制深度精讲

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

在 Python 数据科学与商业数据分析体系中,Pandas 是最为核心、应用最广泛的结构化数据处理库。而在 Pandas 的底层对象模型中,Series 则是最基础的一维带标签数组(One-Dimensional Labeled Array)。与传统的 Python 原生列表(List)或 NumPy 的一维多维数组(ndarray)相比,Series 不仅能够存储同质或异质的各种数据类型(整数、浮点数、字符串、时间戳、Python 对象等),更关键的是它自带显式的轴向索引(Index 标签)。这种“数据 + 标签”绑定的复合物理结构,使得数据检索、子集切片以及多数据集自动对齐变得极其直观、高效与安全。本节我们将深入剖析 Series 的底层架构、多种构造范式以及核心属性。

💡 核心导读

  • Series 的底层本质模型:由一维数据数组(values)与轴向标签索引(index)紧密绑定的复合数据结构。
  • 四大常用创建范式全景
    • 基于 Python 原生列表或元组创建(默认生成 0 开始的 RangeIndex);
    • 基于标量常数广播创建(自动填充指定长度);
    • 基于 Python 字典(Dict)直接构建(字典的 Key 自动映射为 Index,Value 自动映射为数据);
    • 基于 NumPy ndarray 零拷贝/高性能构建。
  • 三大关键核心属性与元数据s.values(底层 NumPy 数组)、s.index(索引对象)与 s.name / s.index.name(数据集与坐标轴名称)。
  • 向量化与广播计算能力:完全继承 NumPy 高性能特性,告别显式 Python 循环。

1. Series 的内部架构与多种构造范式

Series 的逻辑结构可以直观理解为一个“固定长度、带顺序、内存连续的增强型键值字典”:

┌─────────────────────────────────────────────────────────────┐
│                     Pandas Series 物理架构                  │
├──────────────────────────────┬──────────────────────────────┤
│ 显式索引 (Index 标签)        │ 数据数组 (Values 连续内存)   │
├──────────────────────────────┼──────────────────────────────┤
│ 'Beijing'                    │ 2154.2  (万人)               │
│ 'Shanghai'                   │ 2487.1                       │
│ 'Guangzhou'                  │ 1867.7                       │
│ 'Shenzhen'                   │ 1756.0                       │
├──────────────────────────────┴──────────────────────────────┤
│  • s.name = 'City_Population' (数据集名称)                  │
│  • s.index.name = 'City'      (索引列名称)                  │
│  • s.dtype = float64          (底层数据类型)                │
└─────────────────────────────────────────────────────────────┘

与普通 Python 字典相比,Series 的底层数据存储在连续的 NumPy 内存块中,能够享受向量化运算的硬件加速,同时保留了通过具名标签快速检索的便利性。

# 示例 1:Series 的多种构建方式实战

import pandas as pd
import numpy as np

# 1. 从 Python 原生列表构建 (默认生成 0, 1, 2... RangeIndex)
cities = ["北京", "上海", "广州", "深圳"]
populations = [2154.2, 2487.1, 1867.7, 1756.0]

s_default = pd.Series(populations)
print("=== 1. 默认整数索引 Series ===")
print(s_default)

# 2. 指定自定义显式索引与元数据
s_cities = pd.Series(populations, index=cities, name="常住人口(万人)")
s_cities.index.name = "城市"
print("\n=== 2. 自定义索引与元数据命名 ===")
print(s_cities)

# 3. 直接由 Python 字典构建 (Key 自动转为 Index)
gdp_dict = {"北京": 43760, "上海": 47218, "深圳": 34606, "广州": 30355}
s_gdp = pd.Series(gdp_dict, name="城市GDP(亿元)")
print("\n=== 3. 从字典构建 Series ===")
print(s_gdp)

# 4. 字典 + 指定新索引 (自动触发重排与 NaN 缺失值填充)
target_cities = ["北京", "上海", "杭州", "成都"]
s_reindexed = pd.Series(gdp_dict, index=target_cities, name="目标城市GDP")
print("\n=== 4. 字典重建索引与自动填充 NaN ===")
print(s_reindexed)

2. Series 核心属性与向量化广播运算

Series 不仅提供了强大的元数据管理能力,还完全继承了 NumPy 的矢量运算特性。当对 Series 进行加减乘除或标量运算时,Pandas 会自动应用到其内部的每一个元素上,而无需编写低效的 for 循环。更强大的是,当两个 Series 进行运算时,系统会自动基于共同的索引标签进行对齐计算。

# 示例 2:Series 核心属性读取与基础运算

# 1. 访问 values 与 index 属性
print("=== 5. Series 核心属性探查 ===")
print("• 底层数据 (values):", s_cities.values, "| 类型:", type(s_cities.values))
print("• 索引对象 (index):", s_cities.index)
print("• 数据类型 (dtype):", s_cities.dtype)
print("• 元素数量 (size):", s_cities.size)

# 2. 向量化算术运算与广播
# 将人口单位从万人转换为人
s_pop_exact = s_cities * 10000
print("\n=== 6. 向量化乘法 (广播机制) ===")
print(s_pop_exact)

# 3. 计算人均 GDP (两个 Series 基于共同城市标签自动对齐)
per_capita_gdp = (s_gdp * 100000000) / (s_cities * 10000)
print("\n=== 7. 两组 Series 索引自动对齐计算人均GDP(元) ===")
print(per_capita_gdp.round(2))

📝 动手练一练

  1. 概念思考题:当使用字典创建 Series 并额外传入一个包含了字典中不存在的 Key 的 index 列表时,Pandas 会如何处理这个缺失的项?底层会赋予什么特殊值?

    👉 点击查看参考答案

    参考答案: Pandas 会以传入的 index 列表为主干进行对齐。对于字典中原本存在的 Key 会提取对应的值;对于字典中不存在的 Key,Pandas 会自动将其值填充为浮点型的缺失值占位符 NaN(Not a Number),并将 Series 的整体 dtype 自动提升为 float64

  2. 编程练习:创建一个记录某咖啡店一周(周一到周日)美式咖啡销量的 Series,索引为 ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun'],销量自定,并为 Series 和 Index 分别命名为 'Coffee_Sales''Day'

    👉 点击查看参考答案

    参考答案

    import pandas as pd
    
    sales_data = [120, 135, 110, 145, 190, 260, 240]
    days = ['Mon', 'Tue', 'Wed', 'Thu', 'Fri', 'Sat', 'Sun']
    
    coffee_series = pd.Series(sales_data, index=days, name='Coffee_Sales')
    coffee_series.index.name = 'Day'
    print(coffee_series)

本章小结

  • 深刻理解了 Series 作为一维带标签数组的物理模型与数据结构;
  • 掌握了从列表、字典、标量和 ndarray 等多种途径构建 Series 的核心语法;
  • 掌握了 valuesindexname 等核心属性与基础向量化计算。

📋 行动清单

  • 在本地执行示例代码,观察控制台输出并记录关键指标。
  • 做好准备,进入下一小节学习《Pandas 二维核心容器:DataFrame 数据结构》!

—— 小象教研组

配套学习资源与课件
  • 本节课件:数据结构-Series(PDF · 478KB)
    下载
  • 第5章配套代码包:Pandas 示例与数据集(ZIP · 22.5MB)
    下载
  • 全套课件打包(第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 数据库)
    下载
🎁 免费学习资源

领取《小象 11GB VIP 课件资料包与大厂真题手册》

包含全套实战 Jupyter 源码、清洗后数据集、大厂高频面试真题与专属学员答疑交流群。

  • 完整 Python / 数据分析 Jupyter 实战源码
  • 大厂真实业务数据集与练习题
  • 微信扫码添加课程顾问,免费获取网盘下载链接
微信二维码:扫码添加课程顾问微信扫码添加顾问