pandas.cut的一些问题总结

今天偶然用到pandas的cut方法,相当好用,不过也有问题要解决,主要看一些容易困惑的地方。

pandas.cut :

有什么用?

           当我们想要切分数据,或者对数据进行划分,也就是把一组数据分散成离散的间隔,那就要用到 cut 了。

cut(x, bins, right=True, labels=None, retbins=False, precision=3, include_lowest=False, duplicates='raise')
    # Bin values into discrete intervals.

参数都有什么含义:

x: 被切分的类数组(array-like)数据, 前提是必须是1-维 的。

bins:被切分后的区间(我习惯称为“箱”或者“桶”),主要有三种形式: int, sequence of scalars, or pandas.IntervalIndex

    

  • 一个int型的标量
    当bins为一个int型的标量时,代表将x平分成bins份。x的范围在每侧扩展0.1%,以包括x的最大值和最小值。

标量划分:

print(pd.cut(np.array([1, 7, 5, 4, 6, 3]), 3))
# 计划分成3个区间 每个数 放入不同的分箱中

  • 标量序列
    标量序列定义了被分割后每一个bin的区间边缘,此时x没有扩展。
  • pandas.IntervalIndex
    定义要使用的精确区间。

rightbool型参数,默认为True,表示是否包含区间右部。比如如果bins=[1,2,3],right=True,则区间为(1,2],(2,3];right=False,则区间为[1,2),[2,3)。

           不过这里很容易使人疑惑。来看个例子:

right=True的情况:

s = pd.Series(np.array([2, 4, 6, 8, 10]),index=['a', 'b', 'c', 'd', 'e'])
pd.cut(s, [0, 2, 4, 6, 10, 10], labels=False, retbins=True, right=True, duplicates='drop')

# 这时候的划分 (0, 2], (2, 4], (4, 6], (6, 10]   注意:duplicates='drop'表示保证划分是唯一的

right=False的情况:

s = pd.Series(np.array([2, 4, 6, 8, 10]),index=['a', 'b', 'c', 'd', 'e'])
pd.cut(s, [0, 2, 4, 6, 10, 10], labels=False, retbins=True, right=True, duplicates='drop')

# 这时候的划分 [0, 2), [2, 4), [4, 6), [6, 10)   注意:duplicates='drop'表示保证划分是唯一的


labels给分割后的bins打标签,比如把年龄x分割成年龄段bins后,可以给年龄段打上诸如青年、中年的标签。labels的长度必须和划分后的区间长度相等,比如bins=[1,2,3],划分后有2个区间(1,2],(2,3],则labels的长度必须为2。如果指定labels=False,则返回x中的数据在第几个bin中(从0开始)。
retbinsbool型的参数,表示是否将分割后的bins返回,当bins为一个int型的标量时比较有用,这样可以得到划分后的区间,默认为False。
precision保留区间小数点的位数,默认为3.
include_lowestbool型的参数,表示区间的左边是开还是闭的,默认为false,也就是不包含区间左部(闭)。
duplicates是否允许重复区间。有两种选择:raise:不允许,drop:允许。

  • 3
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值