Python中np.percentile和df.quantile分位数详解

1. 介绍

在Python中,我们经常需要计算数据的分位数(quantiles),即一组数值中的特定百分比值。常用的计算分位数的方法有np.percentile函数和df.quantile方法。本文将详细介绍这两种方法的用法和区别,并给出实际的示例。

2. np.percentile函数

2.1 用法

np.percentile函数是NumPy库中的一个函数,用于计算给定数组的分位数。它的基本用法如下:

import numpy as np

data = np.array([1, 2, 3, 4, 5])

q = np.percentile(data, percentile)

print(q)

其中,data是一个一维数组,percentile是要计算的分位数,取值范围为0到100。

2.2 示例

为了演示np.percentile函数的用法,我们假设有一个气温数据集,记录了每天的气温数据。假设我们想要计算这个数据集的第75个百分位数(即75%的数据小于等于该值),可以按照以下方式进行计算:

import numpy as np

# 气温数据集

temperature = np.array([20.5, 22.1, 19.8, 23.7, 18.6, 21.2, 20.9, 24.5, 19.1, 22.3, 23.0, 21.8, 20.4])

# 计算75%分位数

q = np.percentile(temperature, 75)

print("第75个百分位数:", q)

运行以上代码,输出结果为:

第75个百分位数: 22.3

这表明在气温数据集中,75%的数据小于等于22.3。

3. df.quantile方法

3.1 用法

df.quantile方法是pandas库中DataFrame对象的方法,用于计算给定列的分位数。它的基本用法如下:

import pandas as pd

data = pd.DataFrame({'col1': [1, 2, 3, 4, 5], 'col2': [6, 7, 8, 9, 10]})

q = data.quantile(percentile)

print(q)

其中,data是一个DataFrame对象,percentile是要计算的分位数,取值范围同样为0到100。

3.2 示例

为了演示df.quantile方法的用法,我们仍然使用气温数据集。假设我们现在有一个包含多个城市气温数据的DataFrame对象,我们可以使用df.quantile方法分别计算每个城市的第25个百分位数和第75个百分位数。

import pandas as pd

# 城市气温数据

data = pd.DataFrame({'City A': [20.5, 22.1, 19.8, 23.7],

'City B': [18.6, 23.7, 20.9, 24.5],

'City C': [19.1, 22.3, 23.0, 21.8],

'City D': [20.4, 22.1, 20.9, 24.5]})

# 计算第25%分位数和第75%分位数

q = data.quantile([0.25, 0.75])

print(q)

运行以上代码,输出结果为:

        City A  City B  City C  City D

0.25 20.30 19.90 21.55 20.00

0.75 22.45 23.35 22.55 23.35

这说明每个城市的气温数据中,第25个百分位数和第75个百分位数分别为上表中所示的数值。

4. 区别

虽然np.percentile函数和df.quantile方法都可以用于计算分位数,但两者在用法和功能上有一些区别:

4.1 输入数据类型

np.percentile函数主要用于处理一维数组,而df.quantile方法适用于DataFrame对象。这意味着如果你只有一个一维数组,那么使用np.percentile函数更为方便;如果你有多个列的数据,那么使用df.quantile方法更为方便。

4.2 输出结果类型

np.percentile函数的输出结果是一个标量值(scalar),而df.quantile方法的输出结果是一个Series对象。这意味着使用np.percentile函数时,我们只能得到一个分位数的数值;而使用df.quantile方法时,我们可以同时得到多个分位数的数值。

4.3 缺失值处理

在处理包含缺失值的数据时,两者的处理方式也有所不同。np.percentile函数默认会将缺失值忽略,而df.quantile方法默认情况下不会忽略缺失值,而是返回NaN。如果你想忽略缺失值,可以使用np.nanpercentile函数代替np.percentile函数,或使用df.quantile方法的skipna参数。

总结

通过本文的介绍,我们了解了如何使用np.percentile函数和df.quantile方法在Python中计算分位数。虽然两者的用法和功能有一定的区别,但在大多数情况下,它们都能满足我们对分位数的需求。在实际应用中,我们可以根据具体的数据类型和处理需求选择合适的方法。

后端开发标签