Pandas处理数值特征--按区间切分数据

'''
pd.cut(
    x,                   # 切分的数据
    bins,                # 切分的区域
    right:bool=True,     # 控制左右区间的开和闭 True: 左开右闭 False: 左闭右开 默认为True,即左开右闭
    labels=None,         # 标签,对应切分的区域,代替返回的bins,不存在时返回NaN
    retbins:bool=False,  # 是否返回区域bins,默认为False
    precision:int=3,     # 精度,默认为3
    include_lowest:bool=False, # 最左端第一个点是否包含 默认为False,即不包含
    duplicates:str='raise'     # 若切分的数据带有索引,不是单独一列,为'drop' 默认为'raise',即切分的数据为一列
)
'''

参数

1、bins 切分的区域

可以为一个list,也可以为一个int

import numpy as np

x = np.array([10,32,38,55,70,92])

# bins 为 int
pd.cut(x, bins=3)
# output
[(9.918, 37.333], (9.918, 37.333], (37.333, 64.667], (37.333, 64.667], (64.667, 92.0], (64.667, 92.0]]
Categories (3, interval[float64]): [(9.918, 37.333] < (37.333, 64.667] < (64.667, 92.0]]

# bins 为 list
pd.cut(x, bins=[10,30,80,100])
# output
[NaN, (30.0, 80.0], (30.0, 80.0], (30.0, 80.0], (30.0, 80.0], (80.0, 100.0]]
Categories (3, interval[int64]): [(10, 30] < (30, 80] < (80, 100]]
2、right 控制区间的开闭

控制左右区间的开和闭,默认为True,即左开右闭.
True: 左开右闭
False: 左闭右开
从下面代码输出可以看到,right为False时,区间左闭右开,反之…

import numpy as np

x = np.array([10,32,38,55,70,92])
pd.cut(x, bins=[10,30,80,100],right=False)
# output
[[10, 30), [30, 80), [30, 80), [30, 80), [30, 80), [80, 100)]
Categories (3, interval[int64]): [[10, 30) < [30, 80) < [80, 100)]
3、labels 标签(替代)

标签,对应切分的区域,代替返回的bins,不存在时返回NaN

import numpy as np

x = np.array([10,32,38,55,70,92])
pd.cut(x, bins=[10,30,80,100],labels = ['低','中','高'])
# output
[NaN,,,,,]
Categories (3, object): [<<]
4、retbins 返回bins(数组)

是否返回区域bins,默认为False,即不返回
下列代码给出True时的输出结果,array([ 10, 30, 80, 100])

import numpy as np

x = np.array([10,32,38,55,70,92])
pd.cut(x, bins=[10,30,80,100],retbins=True)
# output
([NaN, (30.0, 80.0], (30.0, 80.0], (30.0, 80.0], (30.0, 80.0], (80.0, 100.0]]
 Categories (3, interval[int64]): [(10, 30] < (30, 80] < (80, 100]],
 array([ 10,  30,  80, 100]))
5、include_lowest 最左端点是否包含

左端第一个点是否包含 默认为False,即不包含
下列代码给出True时的输出结果,包含最左端点
最左端点为10,当数据中存在10时,由于要包含最左端点,数据10的区间划分显示为(9.999,30.0]

import numpy as np

x = np.array([10,32,38,55,70,92])
pd.cut(x, bins=[10,30,80,100],include_lowest=True)
# output
[(9.999, 30.0], (30.0, 80.0], (30.0, 80.0], (30.0, 80.0], (30.0, 80.0], (80.0, 100.0]]
Categories (3, interval[float64]): [(9.999, 30.0] < (30.0, 80.0] < (80.0, 100.0]]
6、duplicates

若切分的数据带有索引,不是单独一列,为’drop’ 默认为’raise’,即切分的数据为一列
下列代码给出’drop‘时的输出结果

import numpy as np

x = pd.Series(np.array([10,32,38,55,70,92]),
             index=['a', 'b', 'c', 'd', 'e','f'])
pd.cut(x, bins=[10,30,80,100], duplicates='drop')   
# output
a              NaN
b     (30.0, 80.0]
c     (30.0, 80.0]
d     (30.0, 80.0]
e     (30.0, 80.0]
f    (80.0, 100.0]
dtype: category
Categories (3, interval[int64]): [(10, 30] < (30, 80] < (80, 100]]  

如有错误,恳请指出~

  • 1
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值