如何使用pandas cut()和qcut()

  • Post category:Python

现在我来详细讲解如何使用pandas中的cut()和qcut()函数。

首先,cut() 和 qcut() 函数都是用来将一组数据分割成若干个指定数量的组,这样可以对数据进行分析和处理,通常用于数据分析领域。

cut()函数是根据一组指定的切割点将数据切分为指定数量的组,比如按照年龄将人群分为少年、青年、中年、老年等阶段。下面是cut()函数的语法:

pd.cut(x, bins, right=True, labels=None, retbins=False)

其中参数含义如下:

x:表示被切割的数据,可以是list、numpy的数组或者pandas的Series。

bins:表示被切割的区间,可以是整数、列表或者间隔。

right:表示区间是否包含右边界,默认为True。

labels:表示切割后各组的名称,如果不指定则默认使用区间的名称。

retbins:是否返回每个组的区间,默认为False。

下面是cut()函数的一个例子:

import pandas as pd
import numpy as np

# 创建随机数
arr = np.random.randint(0, 50, 10)

# 将arr分为0-10, 10-20, 20-30, 30-40, 40-50 五个区间
bins = [0, 10, 20, 30, 40, 50]
res = pd.cut(arr, bins)

# 输出切割结果
print(res)

输出结果如下:

[(10, 20], (30, 40], (30, 40], (10, 20], (20, 30], (10, 20], (10, 20], (30, 40], (20, 30], (10, 20]]
Categories (5, interval[int64]): [(0, 10] < (10, 20] < (20, 30] < (30, 40] < (40, 50]]

可以看到,切割出了5个组,每个组代表的是一个区间范围,方括号表示该区间包含左端点,圆括号表示不包含右端点。最后输出的是一个带类别标签的Series。

而qcut()函数则是根据数据的分布情况将数据切分为指定数量的组,切分后每个组的数据个数大致相同。下面是qcut()函数的语法:

pd.qcut(x, q, labels=None, retbins=False, precision=3, duplicates='raise')

其中参数含义如下:

x:表示被切分的数据,可以是list、numpy的数组或者pandas的Series。

q:表示被切分的组数,可以是一个整数或者列表。

labels:表示切割后各组的名称,如果不指定则默认使用区间的名称。

retbins:是否返回每个组的区间,默认为False。

precision:表示小数点后的精度位数,默认为3。

duplicates:表示区间是否可以重复,默认为’raise’,如果出现重复区间将抛出异常,如果为’drop’则将重复区间合并。

下面是qcut()函数的一个例子:

import pandas as pd
import numpy as np

# 创建随机数
arr = np.random.randint(0, 100, 10)

# 将arr分为四组
res = pd.qcut(arr, 4)

# 输出切割结果
print(res)

输出结果如下:

[(23.75, 39.0], (75.25, 99.0], (23.75, 39.0], (0.999, 23.75], (23.75, 39.0], (0.999, 23.75], (75.25, 99.0], (39.0, 75.25], (39.0, 75.25], (23.75, 39.0]]
Categories (4, interval[float64]): [(0.999, 23.75] < (23.75, 39.0] < (39.0, 75.25] < (75.25, 99.0]]

可以看到,qcut()函数将数据分为了4组,并且每组的数据个数大致相同。最后输出的也是一个带类别标签的Series。

总结一下,cut()函数和qcut()函数都是将一组数据分为若干个指定数量的组,但是cut()函数是根据指定的切割点进行切割,qcut()函数是根据数据的分布情况进行切割。