当我们需要将连续性数据进行离散化时,pandas中提供了两个方法pd.cut()和pd.qcut()。pd.cut()是基于指定的区间对数据进行划分,而pd.qcut()则是面向数据分布的方式进行划分。下面将具体介绍这两个方法的使用。
pd.cut()
基本结构
pandas.cut(x, bins, right=True, labels=None, retbins=False, precision=3, include_lowest=False, duplicates='raise', ordered=True)
- x: 要划分的数据
- bins: 分段的依据
- right: 分段左右边界
- labels: 用来标定每个区间的标签
- retbins: 是否返回每个分段的边界
- precision: 分段值舍入精度
- include_lowest: 是否包含分段范围的下界
- duplicates: 是否处理重复值
- ordered: 是否保持顺序
bins参数可以是整数个数或者实现构成的序列,bins参数可以是最小值和最大值的列表或元组,它们将作为最小值和最大值之间的最小和最大值。
示例
import pandas as pd
import numpy as np
data = np.random.randint(10, 50, size=10)
bins = [10, 20, 30, 40, 50]
res = pd.cut(data, bins, labels=['区间1', '区间2', '区间3', '区间4'])
print(res)
接下来对上面代码的输出结果进行解析,输出结果为:
[区间1, 区间3, 区间3, 区间3, 区间1, 区间4, 区间3, 区间2, 区间3, 区间2]
Categories (4, object): ['区间1' < '区间2' < '区间3' < '区间4']
通过该示例,可以看出pd.cut()方法将实数变量映射到有限的类别。对于偏向正态分布的两段随机序列,每3个值对应于一个类别。
pd.qcut()
基本结构
pandas.qcut(x, q, labels=None, retbins=False, precision=3, duplicates='raise')
- x: 要划分的数据
- q: 要划分的区间数
- labels: 用来标定每个区间的标签
- retbins: 是否返回每个分段的边界
- precision: 分段值舍入精度
- duplicates: 是否处理重复值
q参数是要划分的区间数,为整数时,则将变量划分为等宽的区间,为序列时则将数据划分成该序列中每个端点所划定的区间。
示例
import pandas as pd
import numpy as np
data = np.random.rand(10)*10
res1 = pd.qcut(data, 4, labels=['区间1', '区间2', '区间3', '区间4'])
res2 = pd.qcut(data, [0, 0.1, 0.5, 0.9, 1], labels=['区间1', '区间2', '区间3', '区间4'])
print(res1, '\n')
print(res2)
接下来对上面代码的输出结果进行解析,输出结果为:
[区间4, 区间1, 区间4, 区间3, 区间4, 区间1, 区间1, 区间4, 区间2, 区间4]
Categories (4, object): ['区间1' < '区间2' < '区间3' < '区间4']
[区间1, 区间3, 区间2, 区间2, 区间2, 区间2, 区间2, 区间4, 区间3, 区间4]
Categories (4, object): ['区间1' < '区间2' < '区间3' < '区间4']
上述代码中第一个使用了4等分的区间数,而第二个示例的区间数的列表[0, 0.1, 0.5, 0.9, 1]中4个元素刻画了不同分位数。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:pandas pd.cut()与pd.qcut()的具体实现 - Python技术站