Pyhton科学计算工具Pandas(五)—— 常用的数值计算和统计方法
2018-03-23 23:22
609 查看
Pyhton科学计算工具Pandas(五)—— 常用的数值计算和统计方法
基本参数
axis,skipna
# 基本参数:axis、skipna df = pd.DataFrame({'key1':[4,5,3,np.nan,2], 'key2':[1,2,np.nan,4,5], 'key3':[1,2,3,'j','k']}, index = ['a','b','c','d','e']) print(df) print(df['key1'].dtype,df['key2'].dtype,df['key3'].dtype) print('-----') m1 = df.mean() print(m1,type(m1)) print('单独统计一列:',df['key2'].mean()) print('-----') # np.nan :空值 # .mean()计算均值 # 默认只统计数字列 # 可以通过索引单独统计一列 m2 = df.mean(axis=1) print(m2) print('-----') # axis参数:默认为0,以列来计算,axis=1,以行来计算,这里就按照行来汇总了 m3 = df.mean(skipna=False,axis=1) print(m3) print('-----') # skipna参数:是否忽略NaN,默认True,如False,有NaN的列统计结果仍未NaN
常用的统计方法
常用的10种统计方法
# 常用的10中统计方法 df = pd.DataFrame({'key1':np.arange(10), 'key2':np.random.rand(10)*10}) print(df) print('-----') print(df.count(),'→ count统计非Na值的数量\n') print(df.min(),'→ min统计最小值\n',df['key2'].max(),'→ max统计最大值\n') print(df.sum(),'→ sum求和\n') print(df.mean(),'→ mean求平均值\n') print(df.median(),'→ median求算数中位数,50%分位数\n') print(df.std(),'\n',df.var(),'→ std,var分别求标准差,方差\n') print(df.count(axis=1))
key1 key2 0 0 3.248435 1 1 9.072213 2 2 9.894633 3 3 5.371160 4 4 9.685482 5 5 2.272073 6 6 9.740950 7 7 1.502979 8 8 7.518392 9 9 2.928321 ----- key1 10 key2 10 dtype: int64 → count统计非Na值的数量 key1 0.000000 key2 1.502979 dtype: float64 → min统计最小值 9.89463282054 → max统计最大值 key1 45.000000 key2 61.234639 dtype: float64 → sum求和 key1 4.500000 key2 6.123464 dtype: float64 → mean求平均值 key1 4.500000 key2 6.444776 dtype: float64 → median求算数中位数,50%分位数 key1 3.027650 key2 3.429604 dtype: float64 key1 9.166667 key2 11.762180 dtype: float64 → std,var分别求标准差,方差 0 2 1 2 2 2 3 2 4 2 5 2 6 2 7 2 8 2 9 2 dtype: int64
统计分位数
print(df.quantile(q=0.75),'→ quantile统计分位数,参数q确定位置\n') # q值默认0.5
key1 6.750000 key2 9.532165 Name: 0.75, dtype: float64 → quantile统计分位数,参数q确定位置
样本的峰度和偏度
样本的峰度:表征概率密度分布曲线在平均值处峰值高低的特征数。直观看来,峰度描述分布形态的陡缓程度。样本的峰度是和正态分布相比较而言的统计量。在实际应用中,通常将峰度值做减3处理,使得正态分布的峰度0。- 若bk<3,则称分布具有不足的峰度。
- 若bk>3,则称分布具有过度的峰度
- 正态分布的峰度(系数)为常数3,均匀分布的峰度(系数)为常数1.8
- 在相同的标准差下,峰度系数越大,分布就有更多的极端值
样本的偏度:表征概率分布密度曲线相对于平均值不对称程度的特征数。直观看来就是密度函数曲线尾部的相对长度。
- bs<0称分布具有负偏离,也称左偏态,此时数据位于均值左边的比位于右边的少,直观表现为左边的尾部相对于与右边的尾部要长,因为有少数变量值很小,使曲线左侧尾部拖得很长;
- bs>0称分布具有正偏离,也称右偏态,此时数据位于均值右边的比位于左边的少,直观表现为右边的尾部相对于与左边的尾部要长,因为有少数变量值很大,使曲线右侧尾部拖得很长;
- 而bs接近0则可认为分布是对称的
print(df.skew(),'→ skew样本的偏度\n') ''' 在实际应用中,通常将峰度值做减3处理,使得正态分布的峰度0。 Skewness=0 分布形态与正态分布偏度相同 Skewness>0 正偏差数值较大,为正偏或右偏。长尾巴拖在右边。 Skewness<0 负偏差数值较大,为负偏或左偏。长尾巴拖在左边。 ''' print(df.kurt(),'→ kurt样本的峰度\n') ''' Kurtosis=0 与正态分布的陡缓程度相同。 Kurtosis>0 比正态分布的高峰更加陡峭——尖顶峰 Kurtosis<0 比正态分布的高峰来得平台——平顶峰 '''
key1 0.000000 key2 -0.131038 dtype: float64 → skew样本的偏度 key1 -1.200000 key2 -2.032027 dtype: float64 → kurt样本的峰度
样本累计和
# 主要数学计算方法,可用于Series和DataFrame(2) #样本累计和 print(df.cumsum(),'→ cumsum样本的累计和\n') # 结果会覆盖原有的key1 和key2列 df['key1_s'] = df['key1'].cumsum() df['key2_s'] = df['key2'].cumsum() print(df,'→ cumsum样本的累计和\n')
样本累积
# 主要数学计算方法,可用于Series和DataFrame(2) #样本累积 df['key1_s'] = df['key1'].cumprod() df['key2_s'] = df['key2'].cumprod() print(df,'→ cumsum样本的累积\n')
key1 key2 key1_s key2_s 0 0 0.778776 0 0.778776 1 1 4.414836 0 3.438170 2 2 0.747058 0 2.568513 3 3 7.697138 0 19.770201 4 4 2.699437 0 53.368414 5 5 6.943311 0 370.553503 6 6 9.121796 0 3380.113598 7 7 2.361874 0 7983.400775 8 8 4.817986 0 38463.914475 9 9 3.709537 0 142683.320114 → cumsum样本的累积
样本累计最大值和累计最小值
# 主要数学计算方法,可用于Series和DataFrame(2) #样本累计最大值和累计最小值 df['key1_s'] = df['key1'].cummax() #列出此行及上面的行中最大的值 df['key2_s'] = df['key2'].cummax() print(df,'→ cummax求累计最大值\n') df['key1_s'] = df['key1'].cummin() ##列出此行及上面的行中最小的值 df['key2_s'] = df['key2'].cummin() print(df,'→ cummin分别求累计最大值\n')
key1 key2 key1_s key2_s 0 0 0.778776 0 0.778776 1 1 4.414836 1 4.414836 2 2 0.747058 2 4.414836 3 3 7.697138 3 7.697138 4 4 2.699437 4 7.697138 5 5 6.943311 5 7.697138 6 6 9.121796 6 9.121796 7 7 2.361874 7 9.121796 8 8 4.817986 8 9.121796 9 9 3.709537 9 9.121796 → cummax求累计最大值 key1 key2 key1_s key2_s 0 0 0.778776 0 0.778776 1 1 4.414836 0 0.778776 2 2 0.747058 0 0.747058 3 3 7.697138 0 0.747058 4 4 2.699437 0 0.747058 5 5 6.943311 0 0.747058 6 6 9.121796 0 0.747058 7 7 2.361874 0 0.747058 8 8 4.817986 0 0.747058 9 9 3.709537 0 0.747058 → cummin分别求累计最大值
唯一值 .unique()
s = pd.Series(list('asdkfjasjgsdf')) print(s) sq = s.unique() print(sq,type(sq)) print('--------') print(pd.Series(sq)) # 得到一个唯一值数组 # 通过pd.Series重新变成新的Series sq.sort() print(sq) #排序
0 a 1 s 2 d 3 k 4 f 5 j 6 a 7 s 8 j 9 g 10 s 11 d 12 f dtype: object ['a' 's' 'd' 'k' 'f' 'j' 'g'] <class 'numpy.ndarray'> -------- 0 a 1 s 2 d 3 k 4 f 5 j 6 g dtype: object ['a' 'd' 'f' 'g' 'j' 'k' 's']
值计数 .value_counts()
# 值计数:.value_counts() sc = s.value_counts(sort = False) # 也可以这样写:pd.value_counts(sc, sort = False) print(sc) sc_1 = pd.value_counts(s) print(sc_1) # 得到一个新的Series,计算出不同值出现的频率 # sort参数:排序,默认为True
s 3 j 2 a 2 k 1 d 2 g 1 f 2 dtype: int64 s 3 f 2 d 2 a 2 j 2 g 1 k 1 dtype: int64
成员资格 .isin()
#成员资格: isin() s = pd.Series(np.arange(10,15)) df = pd.DataFrame({'key1':list('asdrfthg'), 'key2':np.arange(3,11)}) print(s) print(df) print('------') print(s.isin([10,'a',15])) print(df.isin(['a','sdf',23,1,6,])) ''' 相当于在原数据集上判断是否有这些字符,有则显示True,没有则显示False ''' # 用[]表示 # 得到一个布尔值的Series或者Dataframe
0 10 1 11 2 12 3 13 4 14 dtype: int32 key1 key2 0 a 3 1 s 4 2 d 5 3 r 6 4 f 7 5 t 8 6 h 9 7 g 10 ------ 0 True 1 False 2 False 3 False 4 False dtype: bool key1 key2 0 True False 1 False False 2 False False 3 False True 4 False False 5 False False 6 False False 7 False False
相关文章推荐
- Pyhton科学计算工具Pandas(七)—— 数据的合并,连接与修补
- Pyhton科学计算工具pandas(一)—— Series 数据结构
- Pyhton科学计算工具Pandas(八)—— 数据的去重及替换
- Pyhton科学计算工具Pandas(九)—— 数据分组
- Pyhton科学计算工具Pandas(六)—— 文本数据处理
- Pyhton科学计算工具Pandas(三) —— 数据结构Dataframe的基本操作
- Pyhton科学计算工具Pandas(十)—— 透视表和交叉表
- 介绍一下Python科学计算常用的工具、库、发行版
- python数据处理工具 pandas包常用方法总结(持续更新)
- pandas小记:pandas计算工具-汇总统计
- 科学计算常用开源工具略述
- Pyhton科学计算工具Numpy(一) 之数组
- pandas 常用统计方法
- pandas数值计算与排序方法
- Pyhton科学计算工具Numpy(二)之数组索引切片,numpy随机数及文件生成读取
- pandas小记:pandas计算工具-汇总统计
- pandas 常用统计方法
- GNU Octave - 开放源代码科学计算及数值分析的工具
- JavaScript 深入学习及常用工具方法整理 ---- 01.浮点数
- 相似度计算常用方法综述