📜  pandas 中的 pd.cut - Python (1)

📅  最后修改于: 2023-12-03 14:45:03.094000             🧑  作者: Mango

pandas 中的 pd.cut - Python

在 Pandas 中,pd.cut 函数是一个非常有用的函数,可以将连续型数据进行离散化处理。在数值分析、数据挖掘等领域,离散化是一个非常重要的处理方法。使用 pd.cut 函数可以将数值型数据切分成为区间,方便我们进行统计分析。

函数定义

pd.cut(x, bins, right=True, labels=None, retbins=False, precision=3, include_lowest=False, duplicates='raise')

参数说明
  • x :需要被离散化的一维数组。
  • bins :离散化的依据,可以传入整数表示将样本分成几个等距的区间,也可以传入一维数组表示划分的区间边界;为了更灵活的处理数据,我们可以使用 pandas 提供的 interval_range 函数来指定划分区间。
  • right :指定区间的开闭类型,默认为右闭左开。
  • labels :指定离散后的值的标签,可以传入一维数组或者列表。
  • retbins :是否返回分组边界值,默认为 False
  • precision :制定分组边界的精度。
  • include_lowest :是否包含左区间的边界,默认为 False
  • duplicates :指定是否处理重复的边界值。
返回值说明

返回的是经过离散化后的结果,结果为一维的 Categorical 转换后的对象。

示例代码

首先我们需要导入 pandas,并生成一个随机的数列:

import pandas as pd
import numpy as np

np.random.seed(10)
data = np.random.randn(10)

我们使用 pd.cut 函数将数据划分成 3 个区间:

cuts = pd.cut(data, 3)
print(cuts)

输出为:

[(-0.989, 0.236], (-2.223, -0.989], (-2.223, -0.989], (-0.989, 0.236], (-0.989, 0.236], (0.236, 1.462], (-0.989, 0.236], (0.236, 1.462], (-2.223, -0.989], (0.236, 1.462]]
Categories (3, interval[float64]): [(-2.223, -0.989] < (-0.989, 0.236] < (0.236, 1.462]]

我们可以看到,使用 pd.cut 函数将数据离散化成了 3 个区间,分别为 (-2.223, -0.989](-0.989, 0.236](0.236, 1.462]

我们也可以使用 labels 参数指定离散化后的值的标签,例如:

cuts = pd.cut(data, 3, labels=['low', 'middle', 'high'])
print(cuts)

输出为:

[middle, low, low, middle, middle, high, middle, high, low, high]
Categories (3, object): [low < middle < high]

我们使用 retbins 参数可以返回每个区间的边界:

cuts, bins = pd.cut(data, 3, retbins=True)
print(cuts)
print(bins)

输出为:

[(-0.989, 0.236], (-2.223, -0.989], (-2.223, -0.989], (-0.989, 0.236], (-0.989, 0.236], (0.236, 1.462], (-0.989, 0.236], (0.236, 1.462], (-2.223, -0.989], (0.236, 1.462]]
Categories (3, interval[float64]): [(-2.223, -0.989] < (-0.989, 0.236] < (0.236, 1.462]]
[-2.22317584 -0.9894255   0.24432485  1.47807518]

可以看到,使用 retbins=True 参数时,返回的第二个参数为每个区间的边界值。