pandas.cut#

pandas.cut(x, bins, right=True, labels=None, retbins=False, precision=3, include_lowest=False, duplicates='raise', ordered=True)[源代码]#

将值存储到离散的间隔中。

使用 cut 当您需要对数据值进行分段和排序时。此函数对于从连续变量转换为分类变量也很有用。例如, cut 可以将年龄转换为年龄范围的组。支持装入相同数量的垃圾桶,或预先指定的垃圾桶阵列。

参数
x类似阵列的

要入库的输入数组。必须是一维的。

binsInt、标量序列或IntervalIndex

入库依据的标准。

  • Int:定义在以下范围内的等宽箱数 x 。的范围 x 两边各扩展1.1%,以包括以下各项的最小值和最大值 x

  • 标量序列:定义允许非均匀宽度的仓边。不能扩大范围 x 已经完成了。

  • IntervalIndex:定义要使用的确切垃圾箱。请注意,IntervalIndex bins 必须是非重叠的。

right布尔值,默认为True

指示是否 bins 是否包括最右侧的边。如果 right == True (缺省设置),然后 bins [1, 2, 3, 4] 表示(1,2],(2,3],(3,4)。在以下情况下将忽略此参数 bins 是一个IntervalIndex。

labels数组或FALSE,默认为无

指定回收箱的标签。必须与生成的垃圾箱的长度相同。如果为False,则仅返回垃圾箱的整数指示符。这会影响输出容器的类型(见下文)。在以下情况下将忽略此参数 bins 是一个IntervalIndex。如果为True,则引发错误。什么时候 ordered=False ,则必须提供标签。

retbins布尔值,默认为False

是否退还垃圾箱。当垃圾箱作为标量提供时非常有用。

precision整型,默认为3

存储和显示垃圾箱标签的精度。

include_lowest布尔值,默认为False

第一个间隔是否应该包含在左侧。

duplicates{默认‘RAISE’,‘DROP’},可选

如果bin边不是唯一的,则提高ValueError或删除非唯一性。

ordered布尔值,默认为True

无论标签是否已订购。适用于返回的分类和系列类型(带有分类dtype)。如果为True,则将对结果分类进行排序。如果为False,则生成的分类将是无序的(必须提供标签)。

1.1.0 新版功能.

退货
out分类、系列或ndarray

的每个值表示各自的bin的类似数组的对象 x 。类型取决于 labels

  • 无(默认):返回系列的系列 x 或为所有其他输入设置一个类别。其中存储的值是Interval dtype。

  • 标量序列:返回系列的系列 x 或为所有其他输入设置一个类别。存储在其中的值是序列中的任何类型。

  • FALSE:返回整数的ndarray。

binsNumpy.ndarray或IntervalIndex。

计算的或指定的存储箱。仅在以下情况下返回 retbins=True 。对于标量或序列 bins ,这是一个带有计算箱的ndarray。如果已设置 duplicates=dropbins 将丢弃非唯一的仓位。对于IntervalIndex bins ,这等于 bins

参见

qcut

基于等级或基于样本分位数将变量离散到相同大小的桶中。

Categorical

用于存储来自一组固定值的数据的数组类型。

Series

带有轴标签的一维数组(包括时间序列)。

IntervalIndex

实现有序的、可分割的集合的不可变索引。

注意事项

任何NA值在结果中都将是NA。在生成的系列或分类对象中,越界值将为NA。

参考文献 the user guide 查看更多示例。

示例

将垃圾放入三个大小相等的垃圾桶中。

>>> pd.cut(np.array([1, 7, 5, 4, 6, 3]), 3)
... 
[(0.994, 3.0], (5.0, 7.0], (3.0, 5.0], (3.0, 5.0], (5.0, 7.0], ...
Categories (3, interval[float64, right]): [(0.994, 3.0] < (3.0, 5.0] ...
>>> pd.cut(np.array([1, 7, 5, 4, 6, 3]), 3, retbins=True)
... 
([(0.994, 3.0], (5.0, 7.0], (3.0, 5.0], (3.0, 5.0], (5.0, 7.0], ...
Categories (3, interval[float64, right]): [(0.994, 3.0] < (3.0, 5.0] ...
array([0.994, 3.   , 5.   , 7.   ]))

发现相同的垃圾桶,但为它们分配特定的标签。请注意,返回的分类词的类别为 labels 并被命令。

>>> pd.cut(np.array([1, 7, 5, 4, 6, 3]),
...        3, labels=["bad", "medium", "good"])
['bad', 'good', 'medium', 'medium', 'good', 'bad']
Categories (3, object): ['bad' < 'medium' < 'good']

ordered=False 在传递标签时将导致无序类别。此参数可用于允许非唯一标签:

>>> pd.cut(np.array([1, 7, 5, 4, 6, 3]), 3,
...        labels=["B", "A", "B"], ordered=False)
['B', 'B', 'A', 'A', 'B', 'B']
Categories (2, object): ['A', 'B']

labels=False 意味着你只想要回垃圾桶。

>>> pd.cut([0, 1, 1, 2], bins=4, labels=False)
array([0, 1, 1, 3])

将Series作为输入传递将返回具有分类数据类型的Series:

>>> s = pd.Series(np.array([2, 4, 6, 8, 10]),
...               index=['a', 'b', 'c', 'd', 'e'])
>>> pd.cut(s, 3)
... 
a    (1.992, 4.667]
b    (1.992, 4.667]
c    (4.667, 7.333]
d     (7.333, 10.0]
e     (7.333, 10.0]
dtype: category
Categories (3, interval[float64, right]): [(1.992, 4.667] < (4.667, ...

将Series作为输入传递将返回具有映射值的Series。它用于根据垃圾箱以数字方式映射到间隔。

>>> s = pd.Series(np.array([2, 4, 6, 8, 10]),
...               index=['a', 'b', 'c', 'd', 'e'])
>>> pd.cut(s, [0, 2, 4, 6, 8, 10], labels=False, retbins=True, right=False)
... 
(a    1.0
 b    2.0
 c    3.0
 d    4.0
 e    NaN
 dtype: float64,
 array([ 0,  2,  4,  6,  8, 10]))

使用 drop 当垃圾箱不是唯一的时可选

>>> pd.cut(s, [0, 2, 4, 6, 10, 10], labels=False, retbins=True,
...        right=False, duplicates='drop')
... 
(a    1.0
 b    2.0
 c    3.0
 d    3.0
 e    NaN
 dtype: float64,
 array([ 0,  2,  4,  6, 10]))

将IntervalIndex传递给 bins 结果正是在这些类别中。请注意,IntervalIndex未涵盖的值被设置为NaN。0位于第一个垃圾箱(在右侧关闭)的左侧,1.5位于两个垃圾箱之间。

>>> bins = pd.IntervalIndex.from_tuples([(0, 1), (2, 3), (4, 5)])
>>> pd.cut([0, 0.5, 1.5, 2.5, 4.5], bins)
[NaN, (0.0, 1.0], NaN, (2.0, 3.0], (4.0, 5.0]]
Categories (3, interval[int64, right]): [(0, 1] < (2, 3] < (4, 5]]