python数据清洗,如何求dataframe中位数/平均数/分位数?
发布于 作者:苏南大叔 来源:程序如此灵动~ 我们相信:世界是美好的,你是我也是。平行空间的世界里面,不同版本的生活也在继续...
必须明确一个概念:平均数不是中位数。平均数是所有数的平均,强调的是数量。而中位数是处于最中间的那个数,强调的是位置。所以,两者是有区别的。本文从实际的例子出发,看看两者的区别。
大家好,这里是苏南大叔的“程序如此灵动”博客,这里讲述苏南大叔和计算机代码之间的故事。测试环境:python@3.6.8
,pandas@1.1.5
,numpy@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)
如果不存在最中间的那个数的话,就是最中间的两个数的平均值。
平均数
平均数是一系列数字的均值,很有可能出现小数点,很有可能并不是在这一系列数中真实存在的。
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
相关经验文章,可以参考:
如果本文对您有帮助,或者节约了您的时间,欢迎打赏瓶饮料,建立下友谊关系。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。
本博客不欢迎:各种镜像采集行为。请尊重原创文章内容,转载请保留作者链接。