📅  最后修改于: 2023-12-03 14:45:03.094000             🧑  作者: Mango
在 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
参数时,返回的第二个参数为每个区间的边界值。