查看全课大纲(第 49 / 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.实战:通过移动设备行为数据预测性别和年龄

常用统计方法(2) -- sum mean median count

约 5 分钟

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

常用统计方法(二):求和、均值、中位数与计数

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

在上一节我们学习了 describe() 方法,它可以快速给出数据的整体统计概览。本节我们将深入几个最核心的单变量统计方法:sum()(求和)、mean()(均值)、median()(中位数)和 count()(计数)。这些方法是数据分析的基石,Pandas 在执行这些统计时,会自动、智能地处理缺失值,并针对不同数据类型采用合理的计算逻辑,这正是其强大与便捷之处。

💡 核心导读

  • sum()、mean()、median()、count():掌握这四个核心统计方法的功能与调用方式。
  • 缺失值处理:了解 Pandas 在进行统计时如何自动忽略缺失值(NaN)。
  • 数据类型与统计兼容性:理解不同数据类型(数值、字符串、布尔值)在求和、求均值时的行为差异。
  • median() 与 quantile() 的关系:明确中位数就是 0.5 分位数。

核心统计方法详解

Pandas DataFrame 和 Series 对象提供了丰富的统计方法,其中 sum()、mean()、median() 和 count() 是最常用的一组。

  • sum(): 计算序列或数据框各列的和。
  • mean(): 计算序列或数据框各列的算术平均值。
  • median(): 计算序列或数据框各列的中位数。
  • count(): 统计序列或数据框各列中非空(非 NaN)值的数量。

这些方法在调用时,默认会忽略缺失值(NaN),仅对有效数据进行计算,这避免了因数据缺失而导致统计错误。

统计方法的实际应用与数据类型考量

让我们通过一个具体的例子来观察这些方法的行为。我们将构造一个包含多种数据类型的 DataFrame,模拟视频播放日志数据。

import pandas as pd

# 构造一个包含多种数据类型和缺失值的示例DataFrame
data = pd.DataFrame({
    'time': [10, 20, 30],               # 整型
    'user': ['shirley', 'bob', 'alice'], # 字符串型
    'video': ['vid_A', 'vid_B', 'vid_C'], # 字符串型
    'playback_position': [15.5, 25.0, 35.5], # 浮点型
    'paused': [False, True, False],     # 布尔型
    'volume': [50, 60, 70]              # 整型
})
print("原始数据:")
print(data)
原始数据:
   time     user  video  playback_position  paused  volume
0    10  shirley  vid_A               15.5   False      50
1    20      bob  vid_B               25.0    True      60
2    30    alice  vid_C               35.5   False      70

1. 求和 sum()

对 DataFrame 调用 sum() 方法,会返回每一列的和。

import pandas as pd

# 构造数据
data = pd.DataFrame({
    'time': [10, 20, 30],
    'user': ['shirley', 'bob', 'alice'],
    'video': ['vid_A', 'vid_B', 'vid_C'],
    'playback_position': [15.5, 25.0, 35.5],
    'paused': [False, True, False],
    'volume': [50, 60, 70]
})

# 计算每列的总和
sum_result = data.sum()
print("各列求和结果:")
print(sum_result)
各列求和结果:
time                              60
user                 shirleybobalice
video                vid_Avid_Bvid_C
playback_position               76.0
paused                             1
volume                           180
dtype: object

结果分析:

  • 数值列(time, playback_position, volume):直接进行算术相加。
  • 字符串列(user, video):Pandas 将字符串拼接(Concatenation)作为其“求和”操作。user 列的结果是 'shirleybobalice'。
  • 布尔列(paused):在统计计算中,Pandas 将 False 视为 0,将 True 视为 1。因此 [False, True, False] 的和是 0+1+0=1。

2. 均值 mean() 与中位数 median()

均值和中位数是描述数据集中趋势的重要指标。注意:mean() / median() 只适用于数值型数据(包括布尔型,因其可转换为0/1);对含字符串列的混合 DataFrame 直接调用而不加参数,pandas 2.0 起(numeric_only 默认 False)会直接抛出 TypeError——因此需要像本节示例那样显式使用 numeric_only=True 只对数值列计算。

import pandas as pd

# 构造数据
data = pd.DataFrame({
    'time': [10, 20, 30],
    'user': ['shirley', 'bob', 'alice'],
    'video': ['vid_A', 'vid_B', 'vid_C'],
    'playback_position': [15.5, 25.0, 35.5],
    'paused': [False, True, False],
    'volume': [50, 60, 70]
})

# 计算每列的均值和中位数
mean_result = data.mean(numeric_only=True) # 使用numeric_only参数仅计算数值列
median_result = data.median(numeric_only=True)

print("各列均值结果(仅数值列):")
print(mean_result)
print("\n各列中位数结果(仅数值列):")
print(median_result)
各列均值结果(仅数值列):
time                 20.000000
playback_position    25.333333
paused                0.333333
volume               60.000000
dtype: float64

各列中位数结果(仅数值列):
time                 20.0
playback_position    25.0
paused                0.0
volume               60.0
dtype: float64

关键点:

  • numeric_only=True 参数:确保只对数值列(包括布尔列)进行计算。字符串列无法计算均值或中位数,因此被自动排除。
  • 中位数的计算:将数据从小到大排序后,位于中间位置的值。例如 volume 列 [50, 60, 70] 的中位数是 60。
  • 布尔值的计算:paused 列的均值 0.333... 表示 True 的比例约为 33.3%。

3. 非空值计数 count()

count() 方法用于统计每列中非空(非 NaN)值的个数,是数据质量检查的利器。

import pandas as pd

# 构造一个包含缺失值的数据
data_with_na = pd.DataFrame({
    'A': [1, 2, None, 4],
    'B': [None, 'x', 'y', 'z'],
    'C': [True, False, None, True]
})
print("包含缺失值的数据:")
print(data_with_na)

count_result = data_with_na.count()
print("\n各列非空值数量:")
print(count_result)
包含缺失值的数据:
     A    B      C
0  1.0  NaN   True
1  2.0    x  False
2  NaN    y   None
3  4.0    z   True

各列非空值数量:
A    3
B    3
C    3
dtype: int64

可以看到,count() 准确地告诉我们每一列有多少个有效数据,这对于识别数据缺失情况非常有帮助。

中位数与分位数的关系

中位数有一个重要的数学等价定义:它是数据的 0.5 分位数。在 Pandas 中,我们可以用 quantile(0.5) 来验证这一点。

import pandas as pd

# 构造数据
data = pd.DataFrame({'values': [5, 12, 8, 20, 3, 15, 9]})

median_val = data['values'].median()
quantile_val = data['values'].quantile(0.5)

print(f"中位数 (median()): {median_val}")
print(f"0.5分位数 (quantile(0.5)): {quantile_val}")
print(f"两者是否相等: {median_val == quantile_val}")
中位数 (median()): 9.0
0.5分位数 (quantile(0.5)): 9.0
两者是否相等: True

📝 动手练一练

  1. 概念辨析:对于一个包含字符串、整数和缺失值的 DataFrame df,直接调用 df.mean() 会得到什么结果?为什么?
  2. 动手验证:创建一个简单的 Series:s = pd.Series([10, 20, None, 40, 50])。请分别计算它的 sum()、mean()、median() 和 count(),并观察缺失值是如何被处理的。
👉 点击查看参考答案
  1. 在 Pandas 3.0.6 中,对混合类型的 DataFrame 直接调用 df.mean()(不设置 numeric_only)会抛出 TypeError——pandas 2.0 起 numeric_only 的默认值已改为 False,字符串列不再被”自动排除”,而是让整个调用直接报错。因此最佳实践是显式写 df.mean(numeric_only=True),只对数值列(含布尔列)计算均值(本节正文示例即采用此写法)。

  2. 验证代码如下:

    import pandas as pd
    s = pd.Series([10, 20, None, 40, 50])
    print("Series:", s.to_list())
    print("sum():", s.sum())
    print("mean():", s.mean())
    print("median():", s.median())
    print("count():", s.count())
Series: [10.0, 20.0, nan, 40.0, 50.0]
sum(): 120.0
mean(): 30.0
median(): 30.0
count(): 4
输出结果将显示,`sum()`, `mean()`, `median()` 都自动忽略了 `None`(NaN),只对有效的四个数字 `[10, 20, 40, 50]` 进行计算。`count()` 返回的是非空值的数量 `4`。

本章小结

本节我们深入学习了 Pandas 中四个基础的统计方法:sum()、mean()、median() 和 count()。它们不仅是描述性统计的核心,也体现了 Pandas 设计上的实用性:

  1. 自动处理缺失值:默认忽略 NaN,使分析更稳健。
  2. 类型感知计算:对不同数据类型(数值、字符串、布尔值)采用合理的计算逻辑。
  3. 方法等价性:median() 等价于 quantile(0.5)。

📋 行动清单

  • 在您自己的数据集上,尝试使用 df.sum()、df.mean(numeric_only=True)、df.median(numeric_only=True) 和 df.count() 来快速了解数据的概况。
  • 使用 df.count() 与 len(df) 对比,检查各列是否存在缺失值。
  • 对于布尔型数据列,尝试计算其 mean(),理解其结果代表“True”的比例这一实际意义。

—— 小象教研组

配套资料 · 直接下载

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

  • 本节课件:常用统计方法(2) -- sum mean median count
    PDF · 158KB
    下载
  • 全套课件打包(第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 数据库
    下载