pandas中位数
介绍
中位数是统计学中的一个重要概念,常用于描述一组数据的中心趋势。在pandas库中,我们可以使用median()
函数来计算一组数据的中位数。本文将详细解释pandas中位数的计算方法,以及如何在实际应用中使用该函数。
pandas常用函数
在开始之前,让我们先了解一些pandas中常用的函数。
median()
median()
函数用于计算一组数据的中位数。它可以应用于Series对象和DataFrame对象。
语法:
DataFrame.median(axis=None, skipna=None, level=None, numeric_only=None, **kwargs)
参数解释:
axis
:指定计算中位数的轴,默认为0。axis=0指按列计算,axis=1指按行计算。skipna
:指定是否忽略NaN值,默认为True。level
:当DataFrame具有层次化索引时,指定在某个层次上计算中位数。numeric_only
:指定是否仅计算数值类型的中位数,默认为True。
返回值:
- 如果应用于Series对象,则返回一个标量值,即Series的中位数。
- 如果应用于DataFrame对象,则返回一个包含各列中位数的Series对象,索引为原先的列名。
计算Series的中位数
我们先以一个Series对象为例,来演示如何计算中位数。
import pandas as pd
# 创建一个Series对象
data = pd.Series([1, 2, 3, 4, 5])
首先,在计算中位数之前,我们可以先对数据进行排序,以确保结果的准确性。
# 对数据进行排序
data_sorted = data.sort_values()
print(data_sorted)
运行结果:
0 1
1 2
2 3
3 4
4 5
dtype: int64
接下来,我们可以直接使用median()
函数来计算中位数。
# 计算中位数
median = data_sorted.median()
print("中位数为:", median)
运行结果:
中位数为: 3.0
可以看到,经过排序后,数据集的中位数为3。
值得注意的是,如果数据的个数为奇数,中位数就是按升序排序后,中间那个数;如果数据的个数为偶数,中位数就是按升序排序后,中间两个数的平均数。
计算DataFrame的中位数
对于DataFrame对象,我们可以利用median()
函数快速计算每一列的中位数。
我们首先创建一个简单的DataFrame对象:
import pandas as pd
# 创建一个DataFrame对象
data = {
'A': [1, 2, 3, 4, 5],
'B': [2, 3, 4, 5, 6],
}
df = pd.DataFrame(data)
print(df)
运行结果:
A B
0 1 2
1 2 3
2 3 4
3 4 5
4 5 6
接下来,我们可以直接使用median()
函数来计算每列的中位数。
# 计算每列的中位数
median = df.median()
print("每列的中位数为:\n", median)
运行结果:
每列的中位数为:
A 3.0
B 4.0
dtype: float64
可以看到,我们得到了每列的中位数,返回的是一个包含各列中位数的Series对象。其中,索引为原先的列名,值为中位数。
忽略NaN值的影响
在实际数据处理过程中,我们常常需要忽略NaN值的影响。pandas的median()
函数提供了skipna
参数用于指定是否忽略NaN值,默认为True。
我们来创建一个含有NaN值的DataFrame对象。
import pandas as pd
# 创建一个含有NaN值的DataFrame对象
data = {
'A': [1, 2, 3, 4, None],
'B': [2, 3, 4, None, 6],
}
df = pd.DataFrame(data)
print(df)
运行结果:
A B
0 1.0 2.0
1 2.0 3.0
2 3.0 4.0
3 4.0 NaN
4 NaN 6.0
接下来,我们再次计算每列的中位数,观察skipna
参数的影响。
# 默认情况下,忽略NaN值
median_skipna_default = df.median()
print("忽略NaN值(默认):\n", median_skipna_default)
# 显示忽略NaN值
median_skipna_true = df.median(skipna=True)
print("忽略NaN值(显示指定):\n", median_skipna_true)
# 不忽略NaN值
median_skipna_false = df.median(skipna=False)
print("不忽略NaN值:\n", median_skipna_false)
运行结果:
忽略NaN值(默认):
A 2.0
B 4.0
dtype: float64
忽略NaN值(显示指定):
A 2.0
B 4.0
dtype: float64
不忽略NaN值:
A NaN
B NaN
dtype: float64
可以看到,当skipna
参数为True时(默认情况),median()
函数会忽略NaN值的影响,返回其他数值的中位数。当skipna
参数为False时,median()
函数会将NaN值视为有效值,返回NaN值。
数值类型的中位数计算
在处理DataFrame对象时,有时我们只想计算数值类型列的中位数,而忽略非数值类型的列。这时可以使用numeric_only
参数来指定是否仅计算数值类型的中位数。
我们来创建一个含有非数值类型的DataFrame对象。
import pandas as pd
# 创建一个含有非数值类型的DataFrame对象
data = {
'A': [1, 2, 3, 4, 5],
'B': [2, 3, 4, 5, 6],
'C': ['a', 'b', 'c', 'd', 'e']
}
df = pd.DataFrame(data)
print(df)
运行结果:
A B C
0 1 2 a
1 2 3 b
2 3 4 c
3 4 5 d
4 5 6 e
接下来,我们再次计算每列的中位数,并观察numeric_only
参数的作用。
# 默认情况下,只计算数值类型的中位数
median_numeric_default = df.median()
print("只计算数值类型的中位数(默认):\n", median_numeric_default)
# 显示只计算数值类型的中位数
median_numeric_true = df.median(numeric_only=True)
print("只计算数值类型的中位数(显示指定):\n", median_numeric_true)
# 计算所有列的中位数(包括非数值类型)
median_numeric_false = df.median(numeric_only=False)
print("包括非数值类型的中位数:\n", median_numeric_false)
运行结果:
只计算数值类型的中位数(默认):
A 3.0
B 4.0
dtype: float64
只计算数值类型的中位数(显示指定):
A 3.0
B 4.0
dtype: float64
包括非数值类型的中位数:
A NaN
B NaN
C NaN
dtype: float64
可以看到,当numeric_only
参数为True时,median()
函数只计算数值类型列的中位数,并忽略非数值类型列。当numeric_only
参数为False时,median()
函数会计算所有列的中位数,包括非数值类型列。
总结
本文介绍了pandas库中位数的计算方法,并通过示例代码演示了如何计算Series对象和DataFrame对象的中位数。我们还学习了如何忽略NaN值的影响,以及如何只计算数值类型列的中位数。掌握了这些函数和技巧,可以在实际数据处理和分析中更加灵活地运用pandas库。