【每日一个知识点】pandas.cut() 函数

pandas.cut() 用于将连续变量分箱(分段),即将数据划分为不同的区间,并对每个数据点进行归类。常用于数据离散化,例如将年龄、价格等连续数据转换为类别变量。


函数语法

pandas.cut(x, bins, right=True, labels=None, retbins=False)
参数说明
  • x

    • 需要进行分箱的一维数据(如 SeriesNumPy 数组)。

  • bins

    • 整数:指定分成多少个等宽区间(Pandas 自动计算分界点)。

    • 列表或数组:指定手动分隔的区间边界(如 [0, 10, 20, 30])。

  • right(默认 True):

    • True:区间右闭合 ((a, b],即包含右边界 b,不包含左边界 a)。

    • False:区间左闭合 ([a, b),即包含左边界 a,不包含右边界 b)。

  • labels(默认 None):

    • None:返回的是区间(如 (0, 10])。

    • 列表:为每个分箱指定标签(如 ['低', '中', '高'])。

  • retbins(默认 False):

    • False:仅返回分类后的数据。

    • True:同时返回实际使用的 bins(区间分界点)。


示例 1:等宽分箱

import pandas as pd
import numpy as np

data = np.array([1, 7, 5, 11, 13, 21, 25])
bins = 3  # 指定分成3个等宽区间

result = pd.cut(data, bins)
print(result)
输出
[(0.976, 9.333], (0.976, 9.333], (0.976, 9.333], (9.333, 17.667], (9.333, 17.667], (17.667, 26.0], (17.667, 26.0]]
Categories (3, interval[float64, right]): [(0.976, 9.333] < (9.333, 17.667] < (17.667, 26.0]]

解释

  • bins=3,Pandas 自动计算区间:

    • (0.976, 9.333]

    • (9.333, 17.667]

    • (17.667, 26.0]

  • 每个数据点被归入对应区间。


示例 2:自定义区间

bins = [0, 10, 20, 30]  # 手动定义分箱边界
result = pd.cut(data, bins)
print(result)
输出
[(0, 10], (0, 10], (0, 10], (10, 20], (10, 20], (20, 30], (20, 30]]
Categories (3, interval[int64, right]): [(0, 10] < (10, 20] < (20, 30]]

解释

  • 0-10、10-20、20-30 三个区间。

  • 结果显示每个数据点被归入哪个区间。


示例 3:自定义区间+标签

labels = ['低', '中', '高']
result = pd.cut(data, bins, labels=labels)
print(result)
输出
['低', '低', '低', '中', '中', '高', '高']
Categories (3, object): ['低' < '中' < '高']

解释

  • 低:0-10

  • 中:10-20

  • 高:20-30

  • 结果以标签返回,而不是数值区间。


示例 4:返回分箱边界

result, bin_edges = pd.cut(data, bins, retbins=True)
print("分箱结果:", result)
print("实际使用的分箱边界:", bin_edges)
输出
分箱结果: [(0, 10], (0, 10], (0, 10], (10, 20], (10, 20], (20, 30], (20, 30]]
Categories (3, interval[int64, right]): [(0, 10] < (10, 20] < (20, 30]]
实际使用的分箱边界: [ 0 10 20 30]

解释

  • retbins=True 会返回实际的分箱边界(如 [0, 10, 20, 30])。


总结

参数作用
x需要分箱的数据
bins分箱个数(整数)或自定义分箱边界(列表)
right是否包含右边界(默认 True
labels给分箱结果加上自定义标签
retbins是否返回实际的分箱边界

📌 适用场景

  • 数据离散化(如把年龄划分为"青年"、"中年"、"老年")。

  • 特征工程(如对连续变量进行分箱,提高模型稳定性)。

  • 数据可视化(如将数据分类后统计频次)。

<think>嗯,用户想了解pandas中pd.cut函数的含义和用法。首先,我需要回顾一下这个函数的基本功能。根据引用内容,pd.cut用于将连续数据分箱,也就是分割成离散的区间,比如年龄分段。用户可能是在数据处理时遇到了需要将连续变量转换为分类变量的情况,比如年龄分组、成绩等级划分等。 接下来,我得整理函数的使用说明。引用中提到了参数,比如x、bins、right、labels等。需要详细解释每个参数的作用。例如,x是输入的数据,bins可以指定区间数量或边界值,right控制是否包含右端点,labels用于设置每个区间的标签。这些参数的正确使用对结果影响很大,用户可能需要具体例子来理解。 然后,示例部分很重要。用户可能希望看到实际的代码示例,如何将数据分成指定的区间,并打上标签。比如用pd.cut将年龄分为0-18,19-30等,或者使用均匀分布的区间。同时,引用中的示例提到分箱后的结果可以用于机器学习特征处理,这点也需要说明,让用户了解应用场景。 还要注意用户可能的常见问题,比如如何处理边缘情况,是否包含左边界或右边界。例如,当right=True时,区间是左开右闭还是左闭右开?根据引用,默认是right=True,也就是区间是左开右闭,比如(0, 18]。不过需要确认是否正确,可能实际测试一下会更准确。 另外,用户可能想知道pd.cut和pd.qcut的区别。虽然问题中没有直接问,但引用里提到两者的主要区别在于分箱方法,pd.cut按值均匀分割,而pd.qcut按样本分位数分割。这点可以作为相关问题提出,帮助用户扩展知识。 最后,确保回答结构清晰,按照功能、使用说明、示例和注意事项来组织,并附上相关问题。引用标注要正确,比如参数说明引用了引用[2],示例部分引用了引用[3]和[4]。需要检查是否有遗漏的信息点,并确保示例代码正确无误,能够直接运行。</think>### pandas中`pd.cut`函数的功能及使用说明 #### 1. **功能定义** `pd.cut`是pandas库中用于将连续数值型数据划分为离散区间的函数(即“分箱”操作)。它通过指定区间边界或固定数量的区间,将数据分配到对应的类别中,常用于数据离散化、特征工程或统计分析[^3][^4]。 --- #### 2. **核心参数说明**[^2] ```python pandas.cut( x, # 待分箱的一维数组或Series bins, # 定义区间边界(整数、列表或IntervalIndex) right=True, # 是否包含右边界(默认True,即区间为左开右闭) labels=None, # 为每个区间指定标签(如类别名称) retbins=False, # 是否返回分箱边界(默认False) precision=3, # 区间边界的显示精度 include_lowest=False # 是否包含最小值到第一个区间(默认False) ) ``` --- #### 3. **使用示例** **示例1:按固定边界分箱** ```python import pandas as pd ages = [15, 22, 45, 30, 8, 55] bins = [0, 18, 30, 50, 100] labels = ["儿童", "青年", "中年", "老年"] result = pd.cut(ages, bins=bins, labels=labels, right=False) print(result) ``` 输出: ``` ['儿童', '青年', '中年', '青年', '儿童', '老年'] Categories (4, object): ['儿童' < '青年' < '中年' < '老年'] ``` **说明**:将年龄数据按`[0,18), [18,30), [30,50), [50,100)`划分为4个区间[^3]。 --- **示例2:按区间数量分箱** ```python data = [1.2, 3.5, 5.6, 7.8, 9.1] result = pd.cut(data, bins=3, precision=1) print(result) ``` 输出: ``` [(0.9, 3.7], (0.9, 3.7], (3.7, 6.5], (6.5, 9.3], (6.5, 9.3]] Categories (3, interval[float64, right]): [(0.9, 3.7] < (3.7, 6.5] < (6.5, 9.3]] ``` **说明**:自动将数据均匀分为3个区间,`precision=1`控制区间边界的显示小数位数[^4]。 --- #### 4. **注意事项** - 若`right=True`,区间格式为`(left, right]`;若`right=False`,则为`[left, right)`[^2]。 - 分箱后可通过`pd.value_counts()`统计各区间的频数。 - 数据超出分箱边界时,结果标记为`NaN`。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值