该用 pd.cut() 当需固定区间分箱(如年龄每10岁一档),用 pd.qcut() 当需等频分箱(如前25%为低收入);长尾或重复值多时 pd.qcut() 易报错,pd.cut() 更稳定。
什么时候该用
而不是
看分箱目标:想按固定区间切(比如年龄每10岁一档),用
;想让每档样本数尽量均匀(比如“前25%为低收入”),用
。
常见错误是直接套用
处理长尾分布,结果前几档全是重复值或报
——因为分位点算出来重合了。
接收
参数,可以是整数(等宽划分)、列表(自定义断点)或
生成的序列
的
参数必须是整数或数组,但若数据中存在大量重复值(如评分里一堆5分),即使设
也可能无法生成4个非空箱
当数据量小(pd.qcut() 容易崩,优先改用
+ 手动算分位数
报错
怎么修
本质是分位点计算后出现重复值,尤其在整数型、低精度或含大量相同值的列上(如用户等级、商品评分)。
别急着换函数,先加两个参数:
立即学习
“
Python免费学习笔记(深入)
”;
Python 3.14.3
微软官方的 Python 扩展,是 VS Code 安装量最高的扩展(209M+)。集成 IntelliSense(通过 Pylance)、调试(通过 Python Debugger)、代码检查、格式化、重构和单元测试等功能。支持 Jupyter Notebook、虚拟环境管理和多 Python 版本切换。
下载
加
:跳过重复分位点,自动缩减箱数(比如要4箱,实际只分出3箱)
加
(默认是2):提高分位点浮点精度,减少因四舍五入导致的重复
更稳的做法是先对原始数据加极小扰动:
,再传给
示例:
比裸调用少一半报错概率。
的
和
怎么配合用
这两个参数控制区间开闭和边界归属,不设清楚会导致同一数值被漏掉或归错箱。
(默认):区间为左开右闭,如
,即10归这一档;
则变成
只在
时生效,把最左端点从开变闭,比如
+
→ 第一档变成
,否则0会被判为
真实场景中,若你定义
做年龄段分组,务必加
,否则年龄为0的人会丢进
分箱后怎么保留原始顺序又避免
箱
分箱结果出现
,90% 是原始值超出了
范围,或用了
但某分位点外推失败。
用
时,检查
和
是否落在
和
内;超出部分默认变
,可加
+ 扩展
边界解决
用
时,加
拿到实际生成的分位点,再用这些点喂给
做二次分箱,能彻底避开
无论哪种方法,分箱后立刻跑
,别等建模时报错才回头查
分箱看着简单,但边界处理、重复值、精度丢失这三块最容易在上线后悄悄污染特征分布。动手前先
看一眼原始数据分布形态,比硬写参数靠谱得多。
pd.cut()pd.qcut()pd.cut()pd.qcut()pd.qcut()ValueError: Bin edges must be uniquepd.cut()binsnp.arange()pd.qcut()qq=4pd.cut()pd.qcut()Bin edges must be uniqueduplicates='drop'precision=3data + np.random.normal(0, 1e-8, len(data))pd.qcut()pd.qcut(df['score'], q=4, duplicates='drop')pd.cut()rightinclude_lowestright=True(0, 10]right=False[0, 10)include_lowest=Trueright=Truebins=[0,10,20]include_lowest=True[0, 10]NaNbins=[0, 20, 40, 60]include_lowest=TrueNaNNaNNaNbinspd.qcut()pd.cut()min(data)max(data)bins[0]bins[-1]NaNinclude_lowest=Truebinspd.qcut()retbins=Truepd.cut()NaNresult.isna().sum()value_counts(sort=False)