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
相关产品推荐
相关产品推荐

