您的位置:首页 > 其它

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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: