You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用pd.cut对pandas数值列分箱后出现NaN值的原因及解决方法

pandas pd.cut分箱后出现意外NaN的原因及解决方法

问题原因

  • pd.cut 默认生成左开右闭的分箱区间,你设置的bins [0.0, 10.0, 20.0, 30.0, 50.0] 对应的实际区间为:(0.0, 10.0]、(10.0, 20.0]、(20.0, 30.0]、(30.0, 50.0]
  • 你的数据中存在恰好等于0.0的取值,该值不属于上述任何区间,因此会被默认赋值为NaN,和原始数据是否有缺失值无关。

解决方案

三种可行处理方式按需选择:

方案1:添加include_lowest参数(最适配当前场景)

设置include_lowest=True会自动把第一个区间的左边界纳入覆盖范围:

bins = [0.0, 10.0, 20.0, 30.0, 50.0]
labels = ['1', '2', '3', '4']
df['Distance'] = pd.cut(df['Distance'], bins=bins, labels=labels, include_lowest=True)

方案2:调整bins左边界

把第一个分箱值设为略小于数据最小值的数值,让0.0落入第一个区间:

# 因为你的数据最小值为0.0,设置左边界为-0.000001即可覆盖0值
bins = [-0.000001, 10.0, 20.0, 30.0, 50.0]
labels = ['1', '2', '3', '4']
df['Distance'] = pd.cut(df['Distance'], bins=bins, labels=labels)

方案3:修改区间闭合方向

设置right=False将分箱区间改为左闭右开,注意如果你的数据存在刚好等于50的取值,需要对应调整右边界:

bins = [0.0, 10.0, 20.0, 30.0, 50.0]
labels = ['1', '2', '3', '4']
df['Distance'] = pd.cut(df['Distance'], bins=bins, labels=labels, right=False)

内容的提问来源于stack exchange,提问作者Roz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 00:36:07