用法:
pandas.cut(x, bins, right=True, labels=None, retbins=False, precision=3, include_lowest=False, duplicates='raise', ordered=True)
将值分类为离散间隔。
当您需要将数据值分段和排序到 bin 中时,请使用
cut
。此函数对于从连续变量到分类变量也很有用。例如,cut
可以将年龄转换为年龄范围组。支持分箱成相等数量的箱,或预先指定的箱阵列。- x:array-like
要分箱的输入数组。必须是一维的。
- bins:int、标量序列或 IntervalIndex
分类依据的标准。
int:定义
x
范围内的 equal-width bin 的数量。x
的范围每侧扩展 0.1%,以包括x
的最小值和最大值。标量序列:定义允许非均匀宽度的 bin 边。
x
的范围没有扩展。IntervalIndex:定义要使用的确切 bin。请注意,
bins
的 IntervalIndex 必须不重叠。
- right:布尔值,默认为真
指示
bins
是否包括最右边的边。如果right == True
(默认值),则bins
[1, 2, 3, 4]
表示 (1,2], (2,3], (3,4]。当bins
是 IntervalIndex 时忽略此参数。- labels:数组或假,默认无
指定返回的 bin 的标签。必须与生成的 bin 长度相同。如果为 False,则仅返回 bin 的整数指示符。这会影响输出容器的类型(见下文)。当
bins
是 IntervalIndex 时,忽略此参数。如果为 True,则引发错误。当ordered=False
时,必须提供标签。- retbins:布尔值,默认为 False
是否归还箱子。当 bin 作为标量提供时很有用。
- precision:整数,默认 3
存储和显示 bin 标签的精度。
- include_lowest:布尔值,默认为 False
第一个间隔是否应该是left-inclusive。
- duplicates:{默认 ‘raise’, ‘drop’},可选
如果 bin 边不是唯一的,则引发 ValueError 或删除非唯一的。
- ordered:布尔值,默认为真
标签是否有序。适用于返回的类型 Categorical 和 Series(使用 Categorical dtype)。如果为 True,则将对生成的分类进行排序。如果为 False,则生成的分类将是无序的(必须提供标签)。
- out:分类、系列或 ndarray
一个 array-like 对象,表示
x
的每个值的相应 bin。类型取决于labels
的值。无(默认):为系列
x
返回一个系列,或为所有其他输入返回一个分类。存储在其中的值是 Interval dtype。标量序列:为系列
x
返回一个系列,或为所有其他输入返回一个分类。存储在其中的值是序列中的任何类型。False:返回整数的 ndarray。
- bins:numpy.ndarray 或 IntervalIndex。
计算或指定的 bin。仅在
retbins=True
时返回。对于标量或序列bins
,这是一个带有计算 bin 的 ndarray。如果设置duplicates=drop
,bins
将丢弃非唯一的 bin。对于 IntervalIndexbins
,这等于bins
。
参数:
返回:
注意:
结果中的任何 NA 值都将是 NA。结果 Series 或 Categorical 对象中的越界值将是 NA。
有关更多示例,请参阅用户指南。
例子:
离散为三个equal-sized bin。
>>> 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. ]))
发现相同的箱子,但为它们分配特定的标签。请注意,返回的 Categorical 的类别是
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 作为输入传递会返回具有分类 dtype 的 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。它用于基于 bin 以数字方式映射到间隔。
>>> 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]))
当 bin 不唯一时使用
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]))
为
bins
传递一个IntervalIndex 会导致这些类别完全正确。请注意,IntervalIndex 未涵盖的值设置为 NaN。 0 位于第一个 bin 的左侧(右侧封闭),1.5 位于两个 bin 之间。>>> 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]]
相关用法
- Python pandas.core.resample.Resampler.nearest用法及代码示例
- Python pandas.core.groupby.GroupBy.nth用法及代码示例
- Python pandas.core.groupby.SeriesGroupBy.unique用法及代码示例
- Python pandas.crosstab用法及代码示例
- Python pandas.core.window.rolling.Window.mean用法及代码示例
- Python pandas.core.groupby.DataFrameGroupBy.hist用法及代码示例
- Python pandas.core.groupby.SeriesGroupBy.nlargest用法及代码示例
- Python pandas.core.window.expanding.Expanding.kurt用法及代码示例
- Python pandas.core.window.expanding.Expanding.sum用法及代码示例
- Python pandas.core.window.expanding.Expanding.median用法及代码示例
- Python pandas.core.window.expanding.Expanding.std用法及代码示例
- Python pandas.core.window.rolling.Window.std用法及代码示例
- Python pandas.core.window.rolling.Rolling.aggregate用法及代码示例
- Python pandas.core.window.expanding.Expanding.sem用法及代码示例
- Python pandas.core.window.expanding.Expanding.corr用法及代码示例
- Python pandas.core.groupby.DataFrameGroupBy.resample用法及代码示例
- Python pandas.core.window.expanding.Expanding.aggregate用法及代码示例
- Python pandas.core.resample.Resampler.transform用法及代码示例
- Python pandas.core.window.expanding.Expanding.count用法及代码示例
- Python pandas.core.window.rolling.Rolling.sum用法及代码示例
注:本文由纯净天空筛选整理自pandas.pydata.org大神的英文原创作品 pandas.cut。非经特殊声明,原始代码版权归原作者所有,本译文未经允许或授权,请勿转载或复制。