我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...

必须明确一个概念:平均数不是中位数。平均数是所有数的平均,强调的是数量。而中位数是处于最中间的那个数,强调的是位置。所以,两者是有区别的。本文从实际的例子出发,看看两者的区别。

苏南大叔:python数据清洗,如何求dataframe中位数/平均数/分位数? - 求分位数中位数平均值
python数据清洗,如何求dataframe中位数/平均数/分位数?(图2-1)

大家好,这里是苏南大叔的“程序如此灵动”博客,这里讲述苏南大叔和计算机代码之间的故事。测试环境:python@3.6.8pandas@1.1.5numpy@1.24.4

df.describe()参考

以前的文章里面,描述过一个df.describe()函数,里面可以输出中位数。本文的可以对.describe()的结果进行部分交叉相互验证。

这里给出一组数据,作为例子。

import pandas as pd
df = pd.DataFrame({
    'su': [1, 2, 3, 4, 5],
    'nan': [6, 4, 3, 2, 1],
    'da': [8, 8, 3, 9, 1],
    'shu': [9, 3, 3, 0, 6]
})
df)
df.describe()

输出:

   su  nan  da  shu
0   1    6   8    9
1   2    4   8    3
2   3    3   3    3
3   4    2   9    0
4   5    1   1    6
             su       nan        da       shu
count  5.000000  5.000000  5.000000  5.000000
mean   3.000000  3.200000  5.800000  4.200000
std    1.581139  1.923538  3.563706  3.420526
min    1.000000  1.000000  1.000000  0.000000
25%    2.000000  2.000000  3.000000  3.000000
50%    3.000000  3.000000  8.000000  3.000000
75%    4.000000  4.000000  8.000000  6.000000
max    5.000000  6.000000  9.000000  9.000000

中位数算法

中位数是给出的一系列数里面真实存在的数字,只是它的位置是数字进行从小到大排序后最中间的位置。

df.median()          
df['shu'].median()  

输出:

su     3.0
nan    3.0
da     8.0
shu    3.0
dtype: float64

3.0

也可以执行:

df.quantile(0.5)
df['shu'].quantile(0.5)

苏南大叔:python数据清洗,如何求dataframe中位数/平均数/分位数? - 中位数不是平均数
python数据清洗,如何求dataframe中位数/平均数/分位数?(图2-2)

如果不存在最中间的那个数的话,就是最中间的两个数的平均值。

平均数

平均数是一系列数字的均值,很有可能出现小数点,很有可能并不是在这一系列数中真实存在的。

df.mean()
df['shu'].mean()

输出:

su     3.0
nan    3.2
da     5.8
shu    4.2
dtype: float64

4.2

可见:平均数和中位数是完全不同的概念。

任意分位值

在计算中,还存在着任意分位值。其中,就包括50%分位数(中位数)。

df.quantile(0.25)
df.quantile(0.5)
df.quantile(0.75)

df['shu'].quantile(0.25)
df['shu'].quantile(0.5)
df['shu'].quantile(0.75)

输出:

su     2.0
nan    2.0
da     3.0
shu    3.0
Name: 0.25, dtype: float64
su     3.0
nan    3.0
da     8.0
shu    3.0
Name: 0.5, dtype: float64
su     4.0
nan    4.0
da     8.0
shu    6.0
Name: 0.75, dtype: float64

3.0
3.0
6.0

最大值最小值

这个比较容易计算,比较好理解。

df.max()
df.min()         
df['shu'].max()  
df['shu'].min()

输出:

su     5
nan    6
da     9
shu    9
dtype: int64
su     1
nan    1
da     1
shu    0
dtype: int64

9
0

实际应用

可以利用本文提到的方法,求得对应列的平均值或者中位数,用于NA数据的填充。参考文章:

总结

本文的计算方法,可以和df.describe()的计算结果进行相互印证。更多python相关经验文章,可以参考:

如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。

 【福利】 腾讯云最新爆款活动!1核2G云服务器首年50元!

 【源码】本文代码片段及相关软件,请点此获取更多信息

 【绝密】秘籍文章入口,仅传授于有缘之人   python