【python数据分析(10)】Pandas数值计算和统计基础(核心要点:累计和/积、唯一值、值计数、成员资格判断)

网友投稿 650 2022-09-08

【python数据分析(10)】Pandas数值计算和统计基础(核心要点:累计和/积、唯一值、值计数、成员资格判断)

【python数据分析(10)】Pandas数值计算和统计基础(核心要点:累计和/积、唯一值、值计数、成员资格判断)

1. 主要的数值计算方法

1.1 ​​.count()​​ → count统计非Na值的数量

import pandas as pdimport numpy as npdf = pd.DataFrame({'key1':np.arange(10), 'key2':np.random.rand(10)*10})print(df)print(df.count())

–> 输出的结果为:

0 0 0.1205481 1 9.7062112 2 1.2799553 3 4.4363984 4 1.4126755 5 8.5266356 6 7.9346257 7 4.5527008 8 9.7775769 9 0.705340key1 10key2 10dtype:

1.2 ​​.min()​​​→ min统计最小值, ​​.max()​​→ max统计最大值

可以针对全局数据,也可以针对列或者行中的数据

print(df.min(),df['key2'].max())

–> 输出的结果为:

key1 0.000000key2 0.120548dtype: float64 9.777575893716993

1.3 ​​.quantile(q=0.75)​​→ quantile统计分位数,参数q确定位置

可以直接通过​​df.describe()​​查看

print(df.quantile(q=0.75))

–> 输出的结果为:

key1 6.750000key2 8.378632Name: 0.75, dtype:

1.4 ​​.sum()​​→ sum求和

print(df.sum())

–> 输出的结果为:

key1 45.000000key2 48.452662dtype:

1.5 ​​.mean()​​ → mean求平均值

print(df.mean())

–> 输出的结果为:

key1 4.500000key2 4.845266dtype:

1.6 ​​.median()​​→ median求算数中位数,50%分位数

print(df.median())

–> 输出的结果为:

key1 4.500000key2 4.494549dtype:

1.7 ​​.std() /.var()​​ → std,var分别求标准差,方差

print(df.std(),'\n',df.var())

–> 输出的结果为:

key1 3.027650key2 3.876739dtype: float64 key1 9.166667key2 15.029103dtype:

2. 基本参数

2.1 ​​axis​​​参数:默认为0,以列来计算,​​axis=1​​,以行来计算

​​np.nan​​: 空值

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)m1 = df.mean()print(m1)print(df['key2'].mean())m2 = df.mean(axis=1)print(m2)

–> 输出的结果为:(注意key3中的数值类型,被标记为object,而不是数值型,所以在计算均值的时候未纳入计算)

4.0 1.0 1b 5.0 2.0 2c 3.0 NaN 3d NaN 4.0 je 2.0 5.0 kfloat64 float64 objectkey1 3.5key2 3.0dtype: float643.0a 2.5b 3.5c 3.0d 4.0e 3.5dtype:

2.2 ​​skipna​​参数:是否忽略NaN,默认True,如False,有NaN的列统计结果仍未NaN

m3 = df.mean(skipna=False)print(m3)

–> 输出的结果为:(注意这里将默认参数True改成了False)

key1 NaNkey2 NaNdtype:

3. 统计基础(核心要点)

样本数据生成

df = pd.DataFrame({'key1':np.arange(10), 'key2':np.random.rand(10)*10})print(df)

–> 输出的结果为:

0 0 6.6238541 1 6.3993472 2 0.4915283 3 5.9958014 4 9.5604135 5 9.1558796 6 0.8564847 7 3.2421368 8 0.9410169 9 5.649808

3.1 ​​.cumsum()​​ → 累计和

df['key1_s'] = df['key1'].cumsum()df['key2_s'] = df['key2'].cumsum()print(df)

–> 输出的结果为:(这里以列进行举例,可以想下如何求按行累计和)

0 0 6.623854 0 6.6238541 1 6.399347 1 13.0232022 2 0.491528 3 13.5147293 3 5.995801 6 19.5105304 4 9.560413 10 29.0709435 5 9.155879 15 38.2268226 6 0.856484 21 39.0833067 7 3.242136 28 42.3254428 8 0.941016 36 43.2664589 9 5.649808 45 48.916266

3.2 ​​.cumprod()​​ → 累计积

df['key1_p'] = df['key1'].cumprod()df['key2_p'] = df['key2'].cumprod()print(df)

–> 输出的结果为:

0 0 6.623854 0 6.623854 0 6.6238541 1 6.399347 1 13.023202 0 42.3883442 2 0.491528 3 13.514729 0 20.8350463 3 5.995801 6 19.510530 0 124.9227844 4 9.560413 10 29.070943 0 1194.3133655 5 9.155879 15 38.226822 0 10934.9889156 6 0.856484 21 39.083306 0 9365.6429387 7 3.242136 28 42.325442 0 30364.6889148 8 0.941016 36 43.266458 0 28573.6484149 9 5.649808 45 48.916266 0 161435.635527

3.3 ​​.cummax() / .cummin()​​分别求累计最大值,累计最小值

print(df.cummax(),'\n',df.cummin())

–> 输出的结果为:(就是寻找累计中的最大、最小值)

0 0.0 6.623854 0.0 6.623854 0.0 6.6238541 1.0 6.623854 1.0 13.023202 0.0 42.3883442 2.0 6.623854 3.0 13.514729 0.0 42.3883443 3.0 6.623854 6.0 19.510530 0.0 124.9227844 4.0 9.560413 10.0 29.070943 0.0 1194.3133655 5.0 9.560413 15.0 38.226822 0.0 10934.9889156 6.0 9.560413 21.0 39.083306 0.0 10934.9889157 7.0 9.560413 28.0 42.325442 0.0 30364.6889148 8.0 9.560413 36.0 43.266458 0.0 30364.6889149 9.0 9.560413 45.0 48.916266 0.0 161435.635527 key1 key2 key1_s key2_s key1_p key2_p0 0.0 6.623854 0.0 6.623854 0.0 6.6238541 0.0 6.399347 0.0 6.623854 0.0 6.6238542 0.0 0.491528 0.0 6.623854 0.0 6.6238543 0.0 0.491528 0.0 6.623854 0.0 6.6238544 0.0 0.491528 0.0 6.623854 0.0 6.6238545 0.0 0.491528 0.0 6.623854 0.0 6.6238546 0.0 0.491528 0.0 6.623854 0.0 6.6238547 0.0 0.491528 0.0 6.623854 0.0 6.6238548 0.0 0.491528 0.0 6.623854 0.0 6.6238549 0.0 0.491528 0.0 6.623854 0.0 6.623854

3.4 ​​.unique()​​ → 唯一值

可以得到一个唯一值数组,然后通过pd.Series重新变成新的Series

s = pd.Series(list('asdvasdcfgg'))sq = s.unique()print(s)print(sq,type(sq))print(pd.Series(sq))sq.sort() #重新排序print(sq)

–> 输出的结果为:(最后的结果可以类比于集合去重的方式,只不过这里处理过后的数据带有标签)

0 a1 s2 d3 v4 a5 s6 d7 c8 f9 g10 gdtype: object['a' 's' 'd' 'v' 'c' 'f' 'g'] 0 a1 s2 d3 v4 c5 f6 gdtype: object['a' 'c' 'd' 'f' 'g' 's' 'v']

★★★★★3.5 ​​.value_counts()​​ → 值计数

1) 得到一个新的Series,计算出不同值出现的频率​​​sort​​​参数:排序,默认为​​True​​

sc = s.value_counts(sort = False) print(sc)

–> 输出的结果为:

s 2d 2v 1c 1a 2g 2f 1dtype:

★★★★★3.6 ​​.isin()​​ → 成员资格

1) 数据生成及成员资格判断

s = pd.Series(np.arange(10,15))df = pd.DataFrame({'key1':list('asdcbvasd'), 'key2':np.arange(4,13)})print(s)print(df)print('-----')print(s.isin([5,14]))print(df.isin(['a','bc','10',8]))

–> 输出的结果为:

0 101 112 123 134 14dtype: int32 key1 key20 a 41 s 52 d 63 c 74 b 85 v 96 a 107 s 118 d 12-----0 False1 False2 False3 False4 Truedtype: bool key1 key20 True False1 False False2 False False3 False False4 False True5 False False6 True False7 False False8 False False

2) 选取目标元素(只需要在外层加上一层​​df[]​​即可)

print(df[df.isin(['a','bc','10',8])])

–> 输出的结果为:

0 a NaN1 NaN NaN2 NaN NaN3 NaN NaN4 NaN 8.05 NaN NaN6 a NaN7 NaN NaN8

★★★ 3) ​​.str.contains()​​​方法与 ​​.isin()​​​方法的区别 这里会直接提取包含判断字符的数据,去除空值

print(df[df['key1'].str.contains('a')])print(df[df['key1'].isin(['a'])])

–> 输出的结果为:(这里的输出结果是一致的,取得都是key1中的数据,均为字符类型)

0 a 46 a 10 key1 key20 a 46 a 10

print(df[df['key2'].isin([4])])print(df[df['key2'].str.contains(4)])

–> 输出的结果为:(这里就可以看出区别 ,当数据类型是数值时候,用.str.contains方法行不通)

0 a 4第二种用法报错:AttributeError: Can only use .str accessor with

版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。

上一篇:玩转python?一文总结Python入门到进阶的窍门和技巧!(建议收藏)
下一篇:【python数据处理】将DataFrame数据拆解成为一行一行由字典键值对组成的列表
相关文章

 发表评论

暂时没有评论,来抢沙发吧~