关于Pandas版本: 本文基于 pandas2.2.0 编写。
关于本文内容更新: 随着pandas的stable版本更迭,本文持续更新,不断完善补充。
传送门: Pandas API参考目录
传送门: Pandas 版本更新及新特性
传送门: Pandas 由浅入深系列教程
关于Pandas版本: 本文基于 pandas2.1.2 编写。
关于本文内容更新: 随着pandas的stable版本更迭,本文持续更新,不断完善补充。
Pandas稳定版更新及变动内容整合专题: Pandas稳定版更新及变动迭持续更新。
Pandas.DataFrame.sum
方法用于返回行或列所有元素的累加和。
Pandas累和计算公式:
∑ i = 0 n ? 1 x i \sum_{i=0}^{n-1} x_{i} ∑i=0n?1?xi?
n n n 表示数值的总个数, i i i 表示起始索引下标, x x x 表示累和数值所在数组。
计算过程:
DataFrame.sum(axis=0, skipna=True, numeric_only=False, min_count=0, **kwargs)
Series or scalar
scalar
;Series
。axis : {0 or ‘index’, 1 or ‘columns’}, default 0
axis
参数,用于指定计算方向,即按行计算或按列计算累和:
Series
此参数无效,将始终保持 axis=0
,即计算整列的累和。例1DataFrame
默认为 axis=0
即计算每一列的累和。并有以下参值可选:
? 新增于 Pandas 2.0.0 :
axis
参数,新增于Pandas 2.0.0 版本。
skipna : bool, default False >
skipna
参数,用于指定求累和的时候是否忽略缺失值:
float 0.0
。当字符串和缺失值混合时,会报错!TypeError
。 例2-2?? 注意 :
如果整行或整列,都是缺失值,那么累和结果是0,因为在
DataFrame.sum
方法中,缺失值会被解析为浮点数0.0
例3
numeric_only : bool, default False
numeric_only
参数,用于控制是否 排除非纯数值的行或列:
min_count : int, default 0
min_count
参数,用于指定执行操作所需的有效值数量。如果存在的非 NA
值少于 min_count
,则结果将为 NA
。例5
kwargs
参数,是为了保持与 Numpy
的兼容性而保留的参数,一般不需要传递任何内容。?? 相关方法
Series 求和(累和)
最小值
最大值
最小值索引
最大值索引
最小值
最大值
最小值索引
最大值索引
测试文件下载:
本文所涉及的测试文件,如有需要,可在文章顶部的绑定资源处下载。
若发现文件无法下载,应该是资源包有内容更新,正在审核,请稍后再试。或站内私信作者索要。
Series
始终保持 axis=0
,即计算整列的累和。import numpy as np
import pandas as pd
s = pd.Series([24.0, np.nan, 21.0, 33, 26], name="age")
s.sum()
104.0
import numpy as np
import pandas as pd
s = pd.Series(["一", "二", "你"])
s.sum()
'一二你'
NaN
) 会报错import numpy as np
import pandas as pd
s = pd.Series(["一", "二", np.nan, "你"])
s.sum()
import numpy as np
import pandas as pd
s = pd.Series(["一", "二", 1, "你"])
s.sum()
axis=None
时, DataFrame
的所有值的数据类型必须是相同的,要么都是字符串类型的,要么都是数值类型的,否则会报错!import numpy as np
import pandas as pd
df = pd.DataFrame(
{
"Person": ["John", "Myla", "Lewis", "John", "Myla"],
"Age": [24.0, 2, 21.0, 33, 26],
"Single": [False, True, True, True, False],
}
)
df.sum(axis=None)
DataFrame
每列的累和import numpy as np
import pandas as pd
df = pd.DataFrame(
{
"Person": ["John", "Myla", "Lewis", "John", "Myla"],
"Age": [24.0, 2, 21.0, 33, 26],
"Single": [False, True, True, True, False],
}
)
# 应返回的是Series,为了方便观察,使用.to_frame(),显式为表格形式
df.sum().to_frame()
0 | |
---|---|
Person | JohnMylaLewisJohnMyla |
Age | 106.0 |
Single | 3 |
DataFrame
每行的累和import numpy as np
import pandas as pd
df = pd.DataFrame(
{"A": [28, "Lewis", True], "B": [24.0, "John", False], "C": [30, "Myla", True]}
)
# 应返回的是Series,为了方便观察,使用.to_frame(),显式为表格形式
df.sum(axis=1).to_frame()
0 | |
---|---|
0 | 82.0 |
1 | LewisJohnMyla |
2 | 2 |
import numpy as np
import pandas as pd
df = pd.DataFrame(
{"A": [np.nan, np.nan]},
)
# 应返回的是Series,为了方便观察,使用.to_frame(),显式为表格形式
df.sum().to_frame()
0 | |
---|---|
A | 0.0 |
numeric_only=True
只对数值类型的数据求累和df = pd.DataFrame({"A": [0.5,0.2], "B": ["a",0.7], "C": [True,0.1]})
df.sum(axis=0, numeric_only=True)
# ... A 0.7
# ... dtype: float64
B列由于是数字+字符串,所以没有被计算最小值。 C列布尔值和浮点数混用,也没有被计算最小值
如果不限制有效值数量,即便存在缺失值(NaN),也会被解析为浮点数0.0
pd.Series([np.nan]).sum()
0.0
限制了有效值数量,如果存在的非 NA
值少于 min_count
,则结果将为 NA
pd.Series([np.nan]).sum(min_count=1)
nan