Pandas Series.sum() 函数
Series.sum() 是 Pandas 中用于计算 Series 所有元素之和的函数。它是数据分析中最常用的统计函数之一,可以快速获取数值型数据的总和。
无论是计算总销售额、总利润还是总数量,sum() 都能帮助你快速完成。特别适合处理金融数据、统计报表、销售数据分析等场景。
基本语法与参数
sum() 是 Series 对象的成员函数,直接通过点运算符调用。
语法格式
Series.sum(axis=None, skipna=True, level=None, numeric_only=None, min_count=0, **kwargs)
参数说明
| 参数 | 类型 | 说明 | 默认值 |
|---|---|---|---|
| axis | int | 指定轴向,Series 只有一行数据,此参数主要为了与 DataFrame 兼容。 | None |
| skipna | bool | 如果为 True,在计算时跳过 NaN 值;如果为 False,遇到 NaN 结果会返回 NaN。 | True |
| level | int 或 str | 如果 Series 是多层索引(MultiIndex),指定要计算的层级。 | None |
| numeric_only | bool | 如果为 True,只对数值型数据计算;否则会尝试转换为数值。 | False |
| min_count | int | 计算所需的有效值的最小数量。如果有效值少于该数量,则返回 NaN。 | 0 |
返回值
- 返回类型:数值型(
int、float或numpy.nan) - 说明:返回 Series 中所有元素的总和。如果所有元素都是 NaN(且 skipna=True),则返回 0。
实例
让我们通过一系列从简单到复杂的例子,彻底掌握 Series.sum() 的用法。
示例 1:基础用法 - 计算数值列表的总和
最基本的使用方式是创建一个数值型 Series,然后调用 sum() 计算总和。
实例
import pandas as pd
# 创建一个包含销售额的 Series
# 模拟一周内每天的销售额数据
sales_data = pd.Series([1200, 1500, 1800, 900, 2100, 1600, 1350])
# 计算总销售额
total_sales = sales_data.sum()
print("每日销售额:")
print(sales_data)
print()
print(f"总销售额:{total_sales}")
# 创建一个包含销售额的 Series
# 模拟一周内每天的销售额数据
sales_data = pd.Series([1200, 1500, 1800, 900, 2100, 1600, 1350])
# 计算总销售额
total_sales = sales_data.sum()
print("每日销售额:")
print(sales_data)
print()
print(f"总销售额:{total_sales}")
运行结果:
每日销售额: 0 1200 1 1500 2 1800 3 900 4 2100 5 1600 6 1350 dtype: int64 总销售额:10450
代码解析:
- 创建了一个包含 7 天销售额的 Series,数据类型为整数。
sum()简单地遍历所有元素,将它们相加得到总和 10450。
示例 2:处理包含缺失值的数据
实际数据中经常会有缺失值,skipna 参数决定了如何处理这些缺失值。
实例
import pandas as pd
import numpy as np
# 创建一个包含缺失值的 Series
# 模拟某些日期的销售数据缺失
sales_with_nan = pd.Series([1200, 1500, np.nan, 1800, np.nan, 2100, 1600])
print("包含缺失值的销售数据:")
print(sales_with_nan)
print()
# 默认 skipna=True,跳过 NaN 计算总和
total_skipna = sales_with_nan.sum()
print(f"skipna=True(默认)时的总和:{total_skipna}")
# 设置 skipna=False,遇到 NaN 返回 NaN
total_no_skipna = sales_with_nan.sum(skipna=False)
print(f"skipna=False 时的总和:{total_no_skipna}")
import numpy as np
# 创建一个包含缺失值的 Series
# 模拟某些日期的销售数据缺失
sales_with_nan = pd.Series([1200, 1500, np.nan, 1800, np.nan, 2100, 1600])
print("包含缺失值的销售数据:")
print(sales_with_nan)
print()
# 默认 skipna=True,跳过 NaN 计算总和
total_skipna = sales_with_nan.sum()
print(f"skipna=True(默认)时的总和:{total_skipna}")
# 设置 skipna=False,遇到 NaN 返回 NaN
total_no_skipna = sales_with_nan.sum(skipna=False)
print(f"skipna=False 时的总和:{total_no_skipna}")
运行结果:
包含缺失值的销售数据: 0 1200.0 1 1500.0 2 NaN 3 1800.0 4 NaN 5 2100.0 6 1600.0 dtype: float64 skipna=True(默认)时的总和:8200.0 skipna=False 时的总和:nan
代码解析:
- 当
skipna=True(默认值)时,sum()会自动跳过 NaN 值,只计算有效值的总和。 - 计算过程:1200 + 1500 + 1800 + 2100 + 1600 = 8200
- 当
skipna=False时,只要有 NaN 存在,结果就会返回 NaN,这在需要明确知道数据完整性的场景很有用。
示例 3:使用 min_count 参数
min_count 参数可以设置计算所需的有效值的最小数量,这在需要保证数据充分性时很有用。
实例
import pandas as pd
import numpy as np
# 创建一个大部分是缺失值的 Series
sparse_data = pd.Series([np.nan, np.nan, 100, np.nan, np.nan])
print("大部分缺失的数据:")
print(sparse_data)
print()
# 默认 min_count=0,只要有至少 0 个有效值就计算
result_default = sparse_data.sum()
print(f"min_count=0(默认)时的结果:{result_default}")
# 设置 min_count=3,需要至少 3 个有效值才计算
result_min_count = sparse_data.sum(min_count=3)
print(f"min_count=3 时的结果:{result_min_count}")
# 设置 min_count=2,只需要 2 个有效值
result_min_count_2 = sparse_data.sum(min_count=2)
print(f"min_count=2 时的结果:{result_min_count_2}")
import numpy as np
# 创建一个大部分是缺失值的 Series
sparse_data = pd.Series([np.nan, np.nan, 100, np.nan, np.nan])
print("大部分缺失的数据:")
print(sparse_data)
print()
# 默认 min_count=0,只要有至少 0 个有效值就计算
result_default = sparse_data.sum()
print(f"min_count=0(默认)时的结果:{result_default}")
# 设置 min_count=3,需要至少 3 个有效值才计算
result_min_count = sparse_data.sum(min_count=3)
print(f"min_count=3 时的结果:{result_min_count}")
# 设置 min_count=2,只需要 2 个有效值
result_min_count_2 = sparse_data.sum(min_count=2)
print(f"min_count=2 时的结果:{result_min_count_2}")
运行结果:
大部分缺失的数据: 0 NaN 1 NaN 2 100.0 3 NaN 4 NaN dtype: float64 min_count=0(默认)时的结果:100.0 min_count=3 时的结果:nan min_count=2 时的结果:100.0
代码解析:
- 该 Series 只有 1 个有效值(100)。
min_count=3表示至少需要 3 个有效值才能计算,但实际只有 1 个,所以返回 NaN。min_count=2表示至少需要 2 个有效值,实际有 1 个有效值,不满足条件,所以返回 NaN。- 这个参数在数据质量要求较高的分析场景中非常有用,可以帮助识别有效数据不足的情况。
示例 4:在实际数据分析中的应用
结合实际业务场景,展示 sum() 的典型应用。
实例
import pandas as pd
# 创建模拟的销售数据 DataFrame
sales_data = pd.DataFrame({
'月份': ['1月', '2月', '3月', '4月', '5月', '6月'],
'华东区': [12000, 15000, 18000, 16000, 14000, 17000],
'华北区': [10000, 11000, 13000, 12500, 11500, 14000],
'华南区': [15000, 17000, 19000, 18000, 16000, 20000]
})
print("上半年各区域销售数据:")
print(sales_data)
print()
# 计算每个区域的半年总销售额
for region in ['华东区', '华北区', '华南区']:
total = sales_data[region].sum()
print(f"{region}半年总销售额:{total} 元")
print()
# 计算所有区域的总销售额
total_all = sales_data[['华东区', '华北区', '华南区']].sum().sum()
print(f"所有区域半年总销售额:{total_all} 元")
# 创建模拟的销售数据 DataFrame
sales_data = pd.DataFrame({
'月份': ['1月', '2月', '3月', '4月', '5月', '6月'],
'华东区': [12000, 15000, 18000, 16000, 14000, 17000],
'华北区': [10000, 11000, 13000, 12500, 11500, 14000],
'华南区': [15000, 17000, 19000, 18000, 16000, 20000]
})
print("上半年各区域销售数据:")
print(sales_data)
print()
# 计算每个区域的半年总销售额
for region in ['华东区', '华北区', '华南区']:
total = sales_data[region].sum()
print(f"{region}半年总销售额:{total} 元")
print()
# 计算所有区域的总销售额
total_all = sales_data[['华东区', '华北区', '华南区']].sum().sum()
print(f"所有区域半年总销售额:{total_all} 元")
运行结果:
上半年各区域销售数据: 月份 华东区 华北区 华南区 0 1月 12000 10000 15000 1 2月 15000 11000 17000 2 3月 18000 13000 19000 3 4月 16000 12500 18000 4 5月 14000 11500 16000 5 6月 17000 14000 20000 华东区半年总销售额:92000 元 华北区半年总销售额:72000 元 华南区半年总销售额:105000 元 所有区域半年总销售额:269000 元
注意事项
sum()默认跳过 NaN 值,这在大多数情况下是期望的行为。- 如果需要对包含非数值数据的 Series 求和,需要先进行数据清洗或使用
numeric_only=True参数。 min_count参数在数据验证和质量检查中非常有用,可以帮助识别有效数据不足的情况。- 对于大型数据集,
sum()的性能通常很好,因为它底层使用 NumPy 的向量化操作。
小结
Series.sum() 是 Pandas 中最基础也是最常用的统计函数之一。它的主要特点包括:
- 简单易用,直接通过点运算符调用。
- 支持处理缺失值,通过
skipna参数控制。 - 可以通过
min_count参数设置有效值的最低要求。 - 底层使用 NumPy 的优化实现,计算效率高。
在实际数据分析中,sum() 通常与其他聚合函数(如 mean()、count() 等)配合使用,进行全面的数据统计分析。

Pandas 常用函数