pandas是一个强大的数据分析和处理库,其中包含了许多用于数据分割、分组和汇总的工具。其中两个特别有用的函数是cut()和qcut(),它们可以用来将数据划分为不同的区间或者分位数,并为每个区间或分位数分配一个标签。
pandas cut()函数
pandas cut()函数提供了一种将一组值划分为不同区间(也称为‘面元’)的方式。cut()函数可以接收多种不同类型的输入:
pandas.cut(x: array-like, bins, right=True, labels=None, retbins=False, precision=3, include_lowest=False, duplicates='raise', ordered=True)
参数解释:
- x : array-like,需要划分的一组数据
- bins : int, sequence of scalars, or pandas.IntervalIndex, 定义要使用的面元。如果是int,bins+1会作为面元数量。如果是序列,则序列中的每个相邻元素将组成面元。如果给定IntervalIndex,则使用面元定义。
- right: bool, optional,默认为True,表示是否将面元包含在右边的闭区间内。
- labels: array or bool, optional,默认为None。如果指定,则必须与面元数量匹配。 用于为结果分组指定标签。
- retbins: bool, optional,默认为False。 是否返回创建面元的bins。
- precision: int, optional,默认为3,表示精度。
- include_lowest: bool, optional,默认为False。第一个面元的左侧是否包括数据的最小值。
- duplicates: {default ‘raise’, ‘drop’}, optional。识别重复面元。保留重复的面元或者实际上只返回唯一面元的数量,取决于选择的参数。
- ordered: bool, optional,默认为True。表示结果面元是否有序。
下面是一个简单的示例:
import pandas as pd
import numpy as np
#定义一组数据
ages = [20,22,25,27,21,23,37,31,61,45,41,32]
#将数据划分为年龄段
bins = [18,25,35,60,100]
cats = pd.cut(ages, bins)
#输出结果
print(cats)
输出结果为:
[(18, 25], (18, 25], (18, 25], (25, 35], (18, 25], ..., (25, 35], (60, 100], (35, 60], (35, 60], (25, 35]]
Length: 12
Categories (4, interval[int64]): [(18, 25] < (25, 35] < (35, 60] < (60, 100]]
可以看到,经过cut()函数的处理后,我们已经成功将一组年龄数据划分为了4个年龄段,其中每个年龄段都被赋予了不同的标签。
pandas qcut()函数
pandas qcut()函数是另外一种将数据拆分成差不多长度的等分位的方法。因此,每个分组的元素数量大约相同。使用qcut的主要目的是通过仅使用样本分位数来获得相等的大小的桶。切割只是进行数字之间的比较,并按获取适当数目的占位符分段,因此结果数组的大小可能与传递给它的数组长度不同。
pandas.qcut(x: array-like, q, labels=None, retbins=False, precision=3, duplicates='raise')
参数解释:
- x: array-like,为需要分位数的一组值
- q: int,float或者sequence of percentiles,表示分割的点数或者分位数
- labels: array或者bool,可选。为分配到的面元定义标签
- retbins: bool, optional,默认为False,表示是否返回用于拆分的bins
- precision: int, optional,默认为3,表示精度
- duplicates: {default ‘raise’, ‘drop’}, optional。识别重复面元。保留重复的面元或者实际上只返回唯一面元的数量,取决于选择的参数。
下面是一个简单的示例:
#定义一组数据
data = np.random.randn(1000)
#用qcut将其分为10个部分,并将结果存储在cuts变量中
cuts = pd.qcut(data, 10)
#使用value_counts函数计算每个部分的数量
print(pd.value_counts(cuts))
输出结果为:
(-3.363, -1.325] 100
(-0.0304, 0.423] 100
(0.698, 1.397] 100
(-0.746, -0.412] 100
(0.423, 0.698] 100
(1.397, 3.201] 100
(-1.325, -0.746] 100
(-1.939, -1.325] 100
(-0.412, -0.0304] 100
(-0.0304, 0.263] 100
dtype: int64
可以看到,经过qcut()函数的处理后,我们已经成功将一组数据平均地分成了10份,并将每份的结果存储到了不同的变量中。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:如何使用pandas cut()和qcut() - Python技术站