如何使用 pandas 的cut函数
在数据分析中,我们经常需要将连续的数值数据分割成若干个区间,以便于进行分组分析或者更好地理解数据的分布。Pandas 提供了一个非常有用的函数 cut
,它可以帮助我们将连续数据分割成离散的区间。本文将详细介绍如何使用 pandas 的 cut
函数,并提供多个示例代码来展示其用法。
1. pandas cut 函数基础
pandas.cut
函数可以将一组连续的数据分割成用户指定的若干个区间。其基本语法如下:
pandas.cut(x, bins, right=True, labels=None, retbins=False, precision=3, include_lowest=False, duplicates='raise')
x
:需要被分割的一维数组。bins
:定义区间边界的数值,可以是一个整数指定区间的数量,也可以是一个序列指定每个区间的边界。right
:布尔值,表示区间的闭合方向,True
表示右闭合。labels
:用于标记返回的区间,可以是一个列表或数组。retbins
:布尔值,如果为True
,则返回区间的边界。precision
:区间边界的小数精度。include_lowest
:布尔值,如果为True
,则第一个区间包含最低值。duplicates
:处理重复边界的策略,默认为 ‘raise’,表示抛出错误。
示例代码 1:基本使用
import pandas as pd
data = pd.Series([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
bins = [0, 3, 6, 9, 12]
cut_data = pd.cut(data, bins)
print(cut_data)
Output:
示例代码 2:指定区间数量
import pandas as pd
data = pd.Series([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
cut_data = pd.cut(data, 4)
print(cut_data)
Output:
示例代码 3:更改区间闭合方向
import pandas as pd
data = pd.Series([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
bins = [0, 3, 6, 9, 12]
cut_data = pd.cut(data, bins, right=False)
print(cut_data)
Output:
示例代码 4:指定区间标签
import pandas as pd
data = pd.Series([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
bins = [0, 3, 6, 9, 12]
labels = ['Low', 'Medium', 'High', 'Very High']
cut_data = pd.cut(data, bins, labels=labels)
print(cut_data)
Output:
示例代码 5:返回区间边界
import pandas as pd
data = pd.Series([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
bins = [0, 3, 6, 9, 12]
cut_data, returned_bins = pd.cut(data, bins, retbins=True)
print(returned_bins)
Output:
2. 高级用法
除了基本的分割功能,pandas.cut
还提供了一些高级选项,比如包含最低值的区间、处理重复边界等。
示例代码 6:包含最低值的区间
import pandas as pd
data = pd.Series([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
bins = [1, 3, 6, 9, 12]
cut_data = pd.cut(data, bins, include_lowest=True)
print(cut_data)
Output:
示例代码 7:处理重复边界
import pandas as pd
data = pd.Series([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
bins = [0, 3, 6, 6, 9, 12] # 注意这里有重复的边界 6
cut_data = pd.cut(data, bins, duplicates='drop')
print(cut_data)
Output:
3. 实际应用场景
pandas.cut
函数在实际数据分析中非常有用,比如在处理年龄数据、收入数据等连续变量时,我们经常需要将这些数据分割成几个有意义的组别。
示例代码 8:年龄数据分组
import pandas as pd
age_data = pd.Series([22, 45, 18, 34, 65, 78, 55, 32, 41, 28])
bins = [0, 18, 35, 50, 65, 100]
age_groups = pd.cut(age_data, bins, labels=['Under 18', '18-35', '35-50', '50-65', 'Over 65'])
print(age_groups)
Output:
示例代码 9:收入数据分组
import pandas as pd
income_data = pd.Series([20000, 45000, 30000, 100000, 50000, 70000, 40000, 60000])
bins = [0, 30000, 50000, 75000, 100000, 150000]
income_groups = pd.cut(income_data, bins, labels=['Low', 'Medium', 'High', 'Very High', 'Ultra High'])
print(income_groups)
Output:
4. 结论
Pandas 的 cut
函数是一个非常强大的工具,可以帮助我们将连续数据分割成离散的区间。通过合理地定义区间边界和标签,我们可以更好地分析和理解数据。