Pandas是一个Python中非常流行的数据分析库,它提供了很多功能强大的函数,使得数据处理变得更加简单和高效。其中,cut()和qcut()函数可以帮助我们对数据进行离散化,本篇对话将详细讲解如何使用这两个函数。
1. cut函数
cut()函数可以帮助我们将一组连续的数值数据分成若干个离散的区间。其基本语法如下:
pandas.cut(x, bins, right=True, labels=None, retbins=False, precision=3, include_lowest=False, duplicates='raise')
参数说明:
- x:要切分的数据,可以是一个数组或者Series对象。
- bins:切分依据,可以是一个整数,表示切分的区间个数;也可以是一个数组,表示每个区间的范围。
- right:区间闭合方式,表示右区间是否闭合(即是否包含右端点),默认为True,表示右区间是闭合的。
- labels:指定每个区间的标签,可以是一个字符串数组,长度为bins-1;也可以是False,表示不需要标签。如果不指定,则默认使用区间编号作为标签。
- retbins:是否返回切分后的区间边界,默认为False,表示不返回。
- precision:保留的小数位数,默认为3。
- include_lowest:是否包含左端点,默认为False,表示不包含。
- duplicates:如何处理重复的值,在pandas版本0.18之后才有这个参数,它的值可以是'raise'、'drop'或者'raise'. 默认是 'raise',表示遇到重复值就抛出异常。
接下来我们通过几个示例来说明如何使用cut()函数:
import pandas as pd
import numpy as np
# 例1:切分连续的数据为3个区间
grades = np.array([85, 72, 93, 82, 67, 90, 89, 78])
pd.cut(grades, 3)
输出结果:
[(82.667, 93.0], (72.333, 82.667], (82.667, 93.0], (72.333, 82.667], (61.94, 72.333], (82.667, 93.0], (82.667, 93.0], (72.333, 82.667]]
Categories (3, interval[float64]): [(61.94, 72.333] < (72.333, 82.667] < (82.667, 93.0]]
结果解释:函数cut()将一组连续的数值数据分为3个区间,根据默认设置,区间是右闭合的,即区间不包含左端点但包含右端点。上面的输出结果中,array中的每一个数被分在了三个区间中的一个,interval表示类型为区间类型,输出的Categories表示这个信息,[a,b]表示区间在a到b之间。
# 例2:切分连续的数据,指定区间及标签名称
prices = np.array([1.2, 2.6, 3.5, 5.0, 8.3])
bins = [0, 2, 4, 6, 8, 10]
labels = ['A', 'B', 'C', 'D', 'E']
pd.cut(prices, bins, labels=labels)
输出结果:
[A, A, B, C, D]
Categories (5, object): [A < B < C < D < E]
结果解释:函数cut()将一组连续的数值数据分为五个区间,分别是[0,2), [2,4), [4,6), [6,8), [8,10),标签分别是A、B、C、D、E。由于prices数组中的元素比bins数组中的元素小,因此第一个元素被分到了[A, 2)这个区间中,系列结果集中的结果就是标签名称。
2. qcut函数
qcut()函数也能将一组连续的数据分成若干个离散的区间,与cut()函数不同的是,它能自动根据数据的分布情况,将数据划分成n个等频的区间。其基本语法如下:
pandas.qcut(x, q, labels=None, retbins=False, precision=3, duplicates='raise')
参数说明:
- x:要切分的数据,可以是一个数组或者Series对象。
- q:切分依据,可以是一个整数,表示切分的区间个数;也可以是一个数组,表示每个区间的分位数。
- labels:指定每个区间的标签,可以是一个字符串数组,长度为n-1;也可以是False,表示不需要标签。如果不指定,则默认使用区间编号作为标签。
- retbins:是否返回切分后的区间边界,默认为False,表示不返回。
- precision:保留的小数位数,默认为3。
- duplicates:如何处理重复的值,在pandas版本0.18之后才有这个参数,它的值可以是'raise'、'drop'或者'raise'. 默认是 'raise',表示遇到重复值就抛出异常。
接下来我们通过几个示例来说明如何使用qcut()函数:
import pandas as pd
import numpy as np
# 例1:将一组数值数据划分为4个等频区间
prices = np.array([1.2, 2.6, 3.5, 5.0, 8.3])
pd.qcut(prices, 4)
输出结果:
[(0.999, 2.15], (2.15, 3.375], (2.15, 3.375], (3.375, 8.3], (3.375, 8.3]]
Categories (4, interval[float64]): [(0.999, 2.15] < (2.15, 3.375] < (3.375, 4.725] < (4.725, 8.3]]
结果解释:函数qcut将一组数值数据划分为4个等频区间,并返回区间类别。由于价格差别不是很大,结果中第一个区间较小。
# 例2:将一组数值数据划分为4个等频区间,指定标签名称
prices = np.array([1.2, 2.6, 3.5, 5.0, 8.3])
labels = ['A', 'B', 'C', 'D']
pd.qcut(prices, 4, labels=labels)
输出结果:
[A, A, B, C, D]
Categories (4, object): [A < B < C < D]
结果解释:函数qcut将一组数值数据划分为4个等频区间,将labels设置为['A', 'B', 'C', 'D'],系列结果集中的结果就是标签名称。
到此,我们就讲解了如何使用Pandas中的cut()和qcut()函数对数据进行离散化。这两个函数可以非常方便地将连续数据离散化,减少实际处理过程中的复杂度。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:如何使用pandas cut()和qcut() - Python技术站