如何使用 Pandas cut() 和 qcut()?
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() 方法将数据划分为分位数或百分位数。这两个函数还可以为每个区间或分位数分配标签,这有助于将数值数据转换为分类数据。