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=drop , bins 将丢弃非唯一的仓位。对于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]]