以下代码默认:import pandas as pd
1.1 汇总和计算描述统计
pandas对象拥有一组常用的数学和统计方法,大部分术语约简和汇总设计,用于从Series中提取单个值或从DataFrame的行或列中提取一个Series。
DataFrame的sum方法会返回一个含有列小计的Series。
1 >>> df = pd.DataFrame([[1.4, np.nan], [7.1, -4.5], [np.nan, np.nan], [0.75, -1.3]], index=list('abcd'), columns=['one', 'two']) 2 >>> df 3 one two 4 a 1.40 NaN 5 b 7.10 -4.5 6 c NaN NaN 7 d 0.75 -1.3 8 >>> 9 >>> df.sum() 10 one 9.25 11 two -5.80 12 dtype: float64 13 >>> df.sum(axis=1) 14 a 1.40 15 b 2.60 16 c 0.00 17 d -0.55 18 dtype: float64 19 >>> df.mean(axis=1, skipna=False) #NA值会自动被排除,除非整个切片(指的行和列)都是NA 20 a NaN 21 b 1.300 22 c NaN 23 d -0.275 24 dtype: float64 25 >>>
下表是这些约简方法的常用选项。
选项 |
说明 |
axis |
约简的轴。DataFrame的行用0,列用1 |
skipna |
排除缺失值,默认为True |
level |
如果轴是层次化索引的(即MultiIndex),则根据level分组简约 |
有些方法(如idxmin和idxmax)返回的是间接统计,也有一些是累计型的,还有一种方法,既不是约简型也不是累积性,如describe。
1 >>> df 2 one two 3 a 1.40 NaN 4 b 7.10 -4.5 5 c NaN NaN 6 d 0.75 -1.3 7 >>> df.idxmax() #间接统计 8 one b 9 two d 10 dtype: object 11 >>> df.cumsum() #累计型 12 one two 13 a 1.40 NaN 14 b 8.50 -4.5 15 c NaN NaN 16 d 9.25 -5.8 17 >>> df.describe() #一次性产生多个汇总数据 18 one two 19 count 3.000000 2.000000 20 mean 3.083333 -2.900000 21 std 3.493685 2.262742 22 min 0.750000 -4.500000 23 25% 1.075000 -3.700000 24 50% 1.400000 -2.900000 25 75% 4.250000 -2.100000 26 max 7.100000 -1.300000
对于非数值型数据,describe产生另外一种汇总统计。
1 >>> obj = pd.Series(['a', 'a', 'b', 'c'] * 4) 2 >>> obj 3 0 a 4 1 a 5 2 b 6 3 c 7 4 a 8 5 a 9 6 b 10 7 c 11 8 a 12 9 a 13 10 b 14 11 c 15 12 a 16 13 a 17 14 b 18 15 c 19 dtype: object 20 >>> obj.describe() 21 count 16 22 unique 3 23 top a 24 freq 8 25 dtype: object 26 >>>
下表是所有与描述统计相关的方法。
方法 |
说明 |
count |
非NA值的数量 |
describe |
针对Series或各DataFrame列计算汇总统计 |
min、max |
计算最小值和最大值 |
argmin、argmax |
计算能够获得最小值和最大值的索引位置(整数) |
idxmin、idxmax |
计算能够获得最小值和最大值的索引值 |
quantile |
计算样本的分位数(0到1) |
sum |
值的总和 |
mean |
值的平均数 |
median |
值得算术中位数(50%分位数) |
mad |
根据平均值计算平均绝对离差 |
var |
样本值的方差 |
std |
样本值的标准差 |
skew |
样本值的偏离(三阶矩) |
kurt |
样本值的峰度(四阶矩) |
cumsum |
样本的累计和 |
cummin、cummax |
样本值得累计最大值和累计最小值 |
cumprod |
样本得累计积 |
diff |
计算一阶差分(对时间序列很有用) |
pct_change |
计算百分数变化 |
1.2 相关系数和协方差(未搞懂,后续再补充)
有些汇总统计(如相关系数和协方差)是通过参数对计算出来的。
Series的corr方法用于计算两个Series中重叠的、非NA的、按索引对齐的值的相关系数。
DataFrame的corr和cov方法将以DataFrame的形式返回完整的相关系数或协方差矩阵。
利用DataFrame的corrwith方法,可以计算其列或行跟另一个Series或DataFrame之间的相关系数。传入一个Series将会返回一个相关系数值Series(针对各列进行计算)。
传入一个DataFrame则会计算按列分配对的相关系数。
1.3 唯一值、值计数以及成员资格
从一维Series的值中抽取信息。
unique():可以得到Series中的唯一值数组;
value_counts():用于计算一个Series中各值出现的频率,也是一个顶级pandas方法;
isin():用于判断矢量化集合的成员资格。
1 >>> obj = pd.Series(list(‘cadaabbcc’)) 2 >>> uniques = obj.unique() 3 >>> uniques 4 array(['c', 'a', 'd', 'b'], dtype=object) 5 >>> obj.value_counts() 6 a 3 7 c 3 8 b 2 9 d 1 10 dtype: int64 11 >>> pd.value_counts(obj.values, sort=False) 12 b 2 13 c 3 14 d 1 15 a 3 16 dtype: int64 17 >>> mask = obj.isin(['b', 'c']) 18 >>> mask 19 0 True 20 1 False 21 2 False 22 3 False 23 4 False 24 5 True 25 6 True 26 7 True 27 8 True 28 dtype: bool 29 >>> obj[mask] 30 0 c 31 5 b 32 6 b 33 7 c 34 8 c 35 dtype: object