Pandas DataFrame DataFrame.median() 函数

Jinku Hu 2023年1月30日 2020年6月17日
  1. pandas.DataFrame.median() 语法
  2. 示例代码:DataFrame.median() 方法沿列轴寻找中位数
  3. 示例代码:DataFrame.median() 方法沿行轴寻找中位数
  4. 示例代码:DataFrame.median() 方法忽略 NaN 值来寻找中位数
Pandas DataFrame DataFrame.median() 函数

Python Pandas DataFrame.median() 函数计算 DataFrame 对象的元素沿指定轴的中位数。

中位数不是平均数,而是数字列表中数值的中间值。

Pandas DataFrame 的中位数

pandas.DataFrame.median() 语法

DataFrame.median( axis=None, 
                skipna=None, 
                level=None, 
                numeric_only=None, 
                **kwargs)

参数

axis 沿行(axis=0)或列(axis=1)找中位数
skipna 布尔型。排除 NaN 值(skipna=True)或包含 NaN 值(skipna=False)
level 如果轴为 MultiIndex,则沿特定级别寻找中位数
numeric_only 布尔型。布尔型。对于 numeric_only=True,只包括 floatintboolean
**kwargs 函数的附加关键字参数

返回值

如果没有指定 level,则返回请求轴的中值的 Series,否则返回中位数的 DataFrame

示例代码:DataFrame.median() 方法沿列轴寻找中位数

import pandas as pd

df = pd.DataFrame({'X': [1, 2, 7, 5, 10],
                   'Y': [4, 3, 8, 2, 9]})
print("DataFrame:")
print(df)

medians=df.median()
print("medians of Each Column:")
print(medians)

输出:

DataFrame:
    X  Y
0   1  4
1   2  3
2   7  8
3   5  2
4  10  9
medians of Each Column:
X    5.0
Y    4.0
dtype: float64

计算 XY 两列的中位数,最后返回一个包含每列中位数的 Series 对象。

在 Pandas 中,要找到 DataFrame 中某一列的中位数,我们只调用该列的 median() 函数。

import pandas as pd

df = pd.DataFrame({'X': [1, 2, 7, 5, 10],
                   'Y': [4, 3, 8, 2, 9]})
print("DataFrame:")
print(df)

medians=df["X"].median()
print("medians of Each Column:")
print(medians)

输出:

DataFrame:
    X  Y
0   1  4
1   2  3
2   7  8
3   5  2
4  10  9
medians of Each Column:
5.0

它只给出 DataFrame 中的 X 列的中位数。

示例代码:DataFrame.median() 方法沿行轴寻找中位数

import pandas as pd

df = pd.DataFrame({'X': [1, 2, 7, 5, 10],
                   'Y': [4, 3, 8, 2, 9],
                   'Z': [2, 7, 6, 10, 5]})
print("DataFrame:")
print(df)

medians=df.median(axis=1)
print("medians of Each Row:")
print(medians)

输出:

DataFrame:
    X  Y   Z
0   1  4   2
1   2  3   7
2   7  8   6
3   5  2  10
4  10  9   5
medians of Each Row:
0    2.0
1    3.0
2    7.0
3    5.0
4    9.0
dtype: float64

它计算所有行的中位数,最后返回一个包含每行中位数的 Series 对象。

在 Pandas 中,要想找到 DataFrame 中某一行的中位数,我们只调用 median() 函数来计算这一行的中位数。

import pandas as pd

df = pd.DataFrame({'X': [1, 2, 7, 5, 10],
                   'Y': [4, 3, 8, 2, 9],
                   'Z': [2, 7, 6, 10, 5]})

print("DataFrame:")
print(df)

median=df.iloc[[0]].median(axis=1)
print("median of 1st Row:")
print(median)

输出:

DataFrame:
    X  Y   Z
0   1  4   2
1   2  3   7
2   7  8   6
3   5  2  10
4  10  9   5
median of 1st Row:
0    2.0
dtype: float64

它只给出了 DataFrame 中第一行数值的中位数。

我们使用 iloc 方法根据索引选择行。

示例代码:DataFrame.median() 方法忽略 NaN 值来寻找中位数

我们使用 skipna 参数的默认值,即 skipna=True,通过忽略 NaN 值,沿指定的轴找到 DataFrame 的中位数。

import pandas as pd

df = pd.DataFrame({'X': [1, 2, 7, None, 10, 8],
                   'Y': [None, 3, 8, 2, 9, 6],
                   'Z': [2, 7, 6, 10, None, 5]})

print("DataFrame:")
print(df)

median=df.median(skipna=True)
print("medians of Each Row:")
print(median)

输出:

DataFrame:
      X    Y     Z
0   1.0  NaN   2.0
1   2.0  3.0   7.0
2   7.0  8.0   6.0
3   NaN  2.0  10.0
4  10.0  9.0   NaN
5   8.0  6.0   5.0
medians of Each Row:
X    7.0
Y    6.0
Z    6.0
dtype: float64

如果我们设置 skipna=True,它会忽略 DataFrame 中的 NaN。它允许我们通过忽略 NaN 值来计算 DataFrame 沿列轴的中位数。

import pandas as pd

df = pd.DataFrame({'X': [1, 2, 7, None, 10],
                   'Y': [5, 3, 8, 2, 9],
                   'Z': [2, 7, 6, 10, 4]})

print("DataFrame:")
print(df)

median=df.median(skipna=False)
print("medians of Each Row:")
print(median)

输出:

DataFrame:
      X  Y   Z
0   1.0  5   2
1   2.0  3   7
2   7.0  8   6
3   NaN  2  10
4  10.0  9   4
medians of Each Row:
X    NaN
Y    5.0
Z    6.0
dtype: float64

这里,我们得到的是 NaN 值作为 X 列的中位数,因为 X 列中存在 NaN 值。

Author: Jinku Hu
Jinku Hu avatar Jinku Hu avatar

Founder of DelftStack.com. Jinku has worked in the robotics and automotive industries for over 8 years. He sharpened his coding skills when he needed to do the automatic testing, data collection from remote servers and report creation from the endurance test. He is from an electrical/electronics engineering background but has expanded his interest to embedded electronics, embedded programming and front-/back-end programming.

LinkedIn

相关文章 - Pandas DataFrame