如何使用 Pandas cut() 和 qcut()?

pythonpandasserver side programmingprogramming

Pandas 是一个用于数据处理和结构化数据分析的 Python 库。pandas 的 cut() 和 qcut() 方法用于从数值数据创建分类变量。cut() 和 qcut() 方法分别将数值数据拆分为离散区间或分位数,并为每个区间或分位数分配标签。在本文中,我们将借助各种示例了解 cut() 和 qcut() 方法的功能。

cut() 函数

cut() 根据指定的标准将连续变量划分为离散的区间或区间。它根据输入数据中存在的值范围创建数据组或类别。

语法

pandas.cut(x, bins, labels=None, right=True, include_lowest=False, ...)

上述语法中使用的参数是:

  • x:输入数据,可以是 Pandas 系列或 NumPy 数组。

  • bins:这可以是指定要创建的等宽箱数量的整数值,也可以是定义箱边界的标量值序列。如果提供了整数,则 x 中的值范围将被划分为多个等宽箱。

  • labels(可选): 分配给每个箱的标签的数组对象。如果未提供,标签将为指示箱索引的整数。

  • right(可选): 一个布尔值,指示间隔应该是右闭合(包括右箱边缘)还是左闭合(包括左箱边缘)。默认情况下,它设置为 True。

  • include_lowest(可选): 一个布尔值,指示是否包含间隔的最低值。默认情况下,它设置为 False。

示例 1:等宽箱

在下面的示例中,我们有一个数字数据列表。我们将 bin 指定为 3,表示我们要将数据分成三个等宽的 bin。输出显示每个值所在的间隔以及相应的类别。

import pandas as pd

# 示例 1:等宽箱
data = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100]
bins = 3
categories = pd.cut(data, bins)
print(categories)

输出

[(9.91, 40.0], (9.91, 40.0], (9.91, 40.0], (40.0, 70.0], (40.0, 70.0], (40.0, 70.0], (70.0, 100.0], (70.0, 100.0], (70.0, 100.0]]
类别 (3, interval[float64, right]): [(9.91, 40.0] < (40.0, 70.0] < (70.0, 100.0]]

示例 2:自定义 bin 边界和标签

在下面的示例中,我们定义自定义 bin 边界 [0, 30, 60, 100] 和相应的标签 ['Low', 'Medium', 'High']。cut() 函数根据提供的 bin 和标签将数据中的每个值分配给适当的类别。

# 示例2:自定义箱边和标签
import pandas as pd
data = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100]
bins = [0, 30, 60, 100]
labels = ['Low', 'Medium', 'High']
categories = pd.cut(data, bins, labels=labels)
print(categories)

输出

['Low', 'Low', 'Low', 'Medium', 'Medium', 'Medium', 'High', 'High', 'High', 'High']
Categories (3, object): ['Low' < 'Medium' < 'High']

qcut() 函数

qcut() 函数根据分位数或百分位数分割数据,而 cut() 函数则将数据分割为等宽区间。每个箱中的数据点数量相等,这使得它可用于创建均匀分布的组。

语法

pandas.qcut(x, q, labels=None, retbins=False, precision=3, duplicates='raise')

语法中使用的参数为:

  • x:输入数据,可以是 Pandas 系列或 NumPy 数组。

  • q:一个整数值,指定要创建的分位数的数量或定义截止点的分位数序列(值介于 0 和 1 之间)。

  • labels(可选):分配给每个箱的标签的类似数组的对象。如果未提供,标签将为表示 bin 索引的整数。

  • retbins(可选):一个布尔值,表示是否与类别一起返回 bin 边界。默认情况下,设置为 False。

  • precision(可选):一个整数值,指定分位数的精度。默认情况下,设置为 3。

  • duplicates(可选):如何处理重复值。默认情况下,设置为"raise",这会引发错误。

示例 1:相等的分位数

在下面的示例中,我们有与之前相同的数值数据。通过将分位数指定为 3,我们将数据分成三个大小相等的分位数。输出显示每个值所在的区间以及相应的类别。

import pandas as pd

# 示例 1:等量的分位数
data = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100]
quantiles = 3
categories = pd.qcut(data, quantiles)
print(categories)

输出

[(9.999, 40.0], (9.999, 40.0], (9.999, 40.0], (40.0, 70.0], (40.0, 70.0], (40.0, 70.0], (70.0, 100.0], (70.0, 100.0], (70.0, 100.0]]
类别 (3, interval[float64, right]): [(9.999, 40.0] < (40.0, 70.0] < (70.0, 100.0]]

示例 2:自定义分位数和标签

在下面的示例中,我们定义自定义分位数 [0, 0.3, 0.6, 1] 和相应的标签 ['Low', 'Medium', 'High']。qcut() 函数根据提供的分位数和标签将每个值分配给适当的类别。

import pandas as pd

# 示例 2:自定义分位数和标签
data = [10, 20, 30, 40, 50, 60, 70, 80, 90, 100]
quantiles = [0, 0.3, 0.6, 1]
labels = ['Low', 'Medium', 'High']
categories = pd.qcut(data, quantiles, labels=labels)
print(categories)

输出

['Low', 'Low', 'Low', 'Medium', 'Medium', 'High', 'High', 'High', 'High']
Categories (3, object): ['Low' < '中' < '高']

结论

在本文中,我们讨论了如何使用 pandas cut() 和 qcut() 方法从数值数据创建分类变量。cut() 函数根据给定条件将数据划分为离散区间,而 qcut() 方法将数据划分为分位数或百分位数。这两个函数还可以为每个区间或分位数分配标签,这有助于将数值数据转换为分类数据。


相关文章