如何使用 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
:布尔值,表示区间的右端是否闭合。labels
:用于标记返回的区间的标签。retbins
:布尔值,如果为 True,则返回区间的边界。precision
:区间边界的小数精度。include_lowest
:布尔值,如果为 True,第一个区间的左端将被包含。duplicates
:处理重复边界的策略。
2. 基本用法示例
示例 1:基本分割
import pandas as pd
data = pd.Series([1, 2, 3, 4, 5, 6, 7, 8, 9])
bins = [0, 3, 6, 9]
categories = pd.cut(data, bins)
print(categories)
Output:
示例 2:指定区间闭合方向
import pandas as pd
data = pd.Series([1, 2, 3, 4, 5, 6, 7, 8, 9])
bins = [0, 3, 6, 9]
categories = pd.cut(data, bins, right=False)
print(categories)
Output:
示例 3:添加标签
import pandas as pd
data = pd.Series([1, 2, 3, 4, 5, 6, 7, 8, 9])
bins = [0, 3, 6, 9]
labels = ['Low', 'Medium', 'High']
categories = pd.cut(data, bins, labels=labels)
print(categories)
Output:
示例 4:返回区间边界
import pandas as pd
data = pd.Series([1, 2, 3, 4, 5, 6, 7, 8, 9])
bins = [0, 3, 6, 9]
categories, returned_bins = pd.cut(data, bins, retbins=True)
print(returned_bins)
Output:
示例 5:包含最低值
import pandas as pd
data = pd.Series([1, 2, 3, 4, 5, 6, 7, 8, 9])
bins = [1, 3, 6, 9]
categories = pd.cut(data, bins, include_lowest=True)
print(categories)
Output:
3. 使用自动计算的区间数量
有时候我们可能不想自己指定区间的边界,而是希望 Pandas 能根据数据自动计算出合适的区间数量。这可以通过将 bins
参数设置为一个整数来实现。
示例 6:自动计算区间数量
import pandas as pd
data = pd.Series([10, 20, 30, 40, 50, 60, 70, 80, 90, 100])
categories = pd.cut(data, bins=3)
print(categories)
Output:
示例 7:指定区间数量并添加标签
import pandas as pd
data = pd.Series([10, 20, 30, 40, 50, 60, 70, 80, 90, 100])
labels = ['Low', 'Medium', 'High']
categories = pd.cut(data, bins=3, labels=labels)
print(categories)
Output:
4. 处理重复边界
在使用 cut
函数时,如果区间边界有重复,Pandas 默认会抛出一个错误。我们可以通过 duplicates
参数来修改这种行为。
示例 8:处理重复边界
import pandas as pd
data = pd.Series([1, 2, 3, 4, 5, 6, 7, 8, 9])
bins = [0, 3, 3, 6, 9] # 注意这里有重复的边界3
categories = pd.cut(data, bins, duplicates='drop')
print(categories)
Output:
5. 使用 cut 函数进行实际数据分析
在实际的数据分析项目中,我们经常需要根据某些数值特征将数据集分割成不同的组,以便进行组内分析或比较。
示例 9:根据年龄分组
import pandas as pd
data = pd.DataFrame({
'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'],
'Age': [24, 27, 22, 32, 29]
})
bins = [20, 25, 30, 35]
labels = ['20-25', '25-30', '30-35']
data['Age Group'] = pd.cut(data['Age'], bins, labels=labels)
print(data)
Output:
示例 10:分析不同收入组的消费行为
import pandas as pd
data = pd.DataFrame({
'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'],
'Income': [3000, 4500, 5200, 6100, 2900],
'Expenditure': [1500, 2200, 2500, 2700, 1400]
})
bins = [2000, 4000, 6000, 8000]
labels = ['Low', 'Medium', 'High']
data['Income Group'] = pd.cut(data['Income'], bins, labels=labels)
print(data)
Output:
结论
Pandas 的 cut
函数是一个非常强大的工具,它可以帮助我们将连续的数值数据分割成不同的区间,这在许多数据分析场景中都非常有用。通过上面的示例,我们可以看到 cut
函数的多种用法,包括自定义区间、自动计算区间数量、处理重复边界等。