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

pandas.cut未对0值分箱的解决:如何将0归入[0,1]、200归入>100区间?

解决pandas.cut分箱时0和200显示NaN的问题

我来帮你搞定这个分箱的问题!你遇到的NaN是因为pandas.cut默认采用左开右闭的区间规则(也就是(a,b]),而且你的bins没有覆盖到大于100的数值,所以才会出现0和200无法匹配区间的情况。下面是具体的解决方法:

核心思路

  • 让第一个区间包含0:通过include_lowest=True参数把左边界从开区间改成闭区间
  • 覆盖所有大于100的数值:把bins的最后一个值换成np.inf,这样所有超过100的数都会被纳入最后一个区间

完整代码示例

首先导入需要的库,然后调整bins和参数:

import pandas as pd
from pandas import DataFrame
import numpy as np

# 调整bins,最后用np.inf覆盖所有大于100的数
bins = [0, 1, 5, 10, 25, 50, 100, np.inf]
df = DataFrame({'Numbers':[0,1,2,7,11,16,45,200]})
# 使用include_lowest=True让第一个区间包含0
df['Bins'] = pd.cut(df['Numbers'], bins, include_lowest=True)

执行后你会得到这样的结果:

Numbers          Bins
0        0   [0.0, 1.0]
1        1   [0.0, 1.0]
2        2    (1.0, 5.0]
3        7   (5.0, 10.0]
4       11  (10.0, 25.0]
5       16  (10.0, 25.0]
6       45  (25.0, 50.0]
7      200  (100.0, inf]

自定义区间标签(可选)

如果想把最后一个区间显示成>100而不是(100.0, inf],可以用labels参数自定义显示文本:

# 自定义每个区间的显示标签
labels = ['[0,1]', '(1,5]', '(5,10]', '(10,25]', '(25,50]', '(50,100]', '>100']
df['Bins'] = pd.cut(df['Numbers'], bins, include_lowest=True, labels=labels)

此时结果会变成:

Numbers      Bins
0        0     [0,1]
1        1     [0,1]
2        2    (1,5]
3        7   (5,10]
4       11  (10,25]
5       16  (10,25]
6       45  (25,50]
7      200     >100

这样就完美解决你的问题啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 10:33:20