浅谈pandas.cut与pandas.qcut的使用方法及区别
pandas.cut
pandas.cut是用于对一列数据进行分段操作的函数。其语法形式为:
pandas.cut(x, bins, right=True, labels=None, retbins=False, precision=3, include_lowest=False, duplicates='raise')
参数说明:
- x:需要分段的数据
- bins:可以是一个int型数据(代表分为几段),也可以是一个列表,代表每一段的范围
- right:是否包含右端点,默认为True,即包含
- labels:分段后各个段的标签
- retbins:是否返回每一段分隔点的具体位置
- precision:保留几位小数
- include_lowest:是否包含最小值,若设置为True,则第一段左端点为数据的最小值,否则为最小值+epsilon
- duplicates:处理范围重复的数据的方法。raise:直接抛出异常(默认);drop:去除;cut:将重复的位置分配到不同的区间中。
示例:
import pandas as pd
# 构造数据
data = pd.Series([23, 24, 25, 25, 26, 27, 29, 30, 32, 35, 38])
# 将数据分为3段
cut_data = pd.cut(data, bins=3)
print(cut_data)
# 指定labels以及不包含右端点
cut_data = pd.cut(data, bins=3, right=False, labels=['A', 'B', 'C'])
print(cut_data)
# 返回每一段的分隔点位置
cut_data, bins = pd.cut(data, bins=3, right=False, labels=['A', 'B', 'C'], retbins=True)
print(cut_data)
print(bins)
输出:
0 (22.977, 27.667]
1 (22.977, 27.667]
2 (22.977, 27.667]
3 (22.977, 27.667]
4 (22.977, 27.667]
5 (22.977, 27.667]
6 (27.667, 32.333]
7 (27.667, 32.333]
8 (27.667, 32.333]
9 (27.667, 32.333]
10 (32.333, 37.0033]
dtype: category
Categories (3, interval[float64]): [(22.977, 27.667] < (27.667, 32.333] < (32.333, 37.0033]]
0 A
1 A
2 A
3 A
4 A
5 A
6 B
7 B
8 B
9 B
10 C
dtype: category
Categories (3, object): ['A' < 'B' < 'C']
0 A
1 A
2 A
3 A
4 B
5 B
6 B
7 B
8 C
9 C
10 C
dtype: category
Categories (3, object): ['A' < 'B' < 'C']
[23. 26.33333333 29.66666667 35. ]
pandas.qcut
pandas.qcut是用于将数据均分为n段的函数,每一段的样本数量大致相同。其语法形式为:
pandas.qcut(x, q, labels=None, retbins=False, precision=3, duplicates='raise')
参数说明:
- x:需要分段的数据
- q:一个整数时,为分成几段。为列表时,分段的分位数位置。
- labels:分段后的标签
- retbins:是否返回每一段分隔点的具体位置
- duplicates:处理范围重复的数据的方法。raise:直接抛出异常(默认);drop:去除;cut:将重复的位置分配到不同的区间中。
示例:
import pandas as pd
# 构造数据
data = pd.Series([23, 24, 25, 25, 26, 27, 29, 30, 32, 35, 38])
# 将数据分为3段
qcut_data = pd.qcut(data, 3)
print(qcut_data)
# 指定labels
qcut_data = pd.qcut(data, 3, labels=['A', 'B', 'C'])
print(qcut_data)
# 返回每一段的分隔点位置
qcut_data, bins = pd.qcut(data, 3, labels=['A', 'B', 'C'], retbins=True)
print(qcut_data)
print(bins)
输出:
0 (22.999, 26.0]
1 (22.999, 26.0]
2 (22.999, 26.0]
3 (22.999, 26.0]
4 (22.999, 26.0]
5 (26.0, 30.333]
6 (26.0, 30.333]
7 (26.0, 30.333]
8 (30.333, 38.0]
9 (30.333, 38.0]
10 (30.333, 38.0]
dtype: category
Categories (3, interval[float64]): [(22.999, 26.0] < (26.0, 30.333] < (30.333, 38.0]]
0 A
1 A
2 A
3 A
4 A
5 B
6 B
7 B
8 C
9 C
10 C
dtype: category
Categories (3, object): ['A' < 'B' < 'C']
0 A
1 A
2 A
3 A
4 A
5 B
6 B
7 B
8 C
9 C
10 C
dtype: category
Categories (3, object): ['A' < 'B' < 'C']
[23, 26], (26, 30.333], (30.333, 38]]
Categories (3, object): ['A' < 'B' < 'C']]
[22.999, 26.0, 30.333, 38.0]
区别
- pandas.cut的分段是固定的,即指定分几段或每一段的范围;
- pandas.qcut是按照样本数量来分段的,每一段的样本数量大致相同,在这个意义上说,方式更偏向于“自然分段”。
两者使用的选择依据实际数据而定。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:浅谈pandas.cut与pandas.qcut的使用方法及区别 - Python技术站