pandas.cut详解

在数据处理和分析中,常常需要根据一定的规则对数据进行分段处理。pandas提供了一个非常方便的函数cut来实现这个功能。
pandas.cut的基本用法
pandas.cut函数的基本功能是根据指定的切分点对数据进行分段处理,并返回一个Categorical类型的Series。下面我们来看一个简单的示例:
import pandas as pd
# 创建一个DataFrame
data = pd.DataFrame({'values': [1, 5, 10, 15, 20]})
# 切分点
bins = [0, 5, 10, 15, 20, 100]
# 使用cut函数进行分段处理
data['segment'] = pd.cut(data['values'], bins)
print(data)
运行以上代码,我们可以得到以下输出:
values segment
0 1 (0, 5]
1 5 (0, 5]
2 10 (5, 10]
3 15 (10, 15]
4 20 (15, 20]
从输出可以看出,pandas.cut函数通过指定的切分点将values列的值分成了不同的区间,并生成了一个新的segment列。
指定区间标签
除了指定切分点外,我们还可以通过labels参数来指定分段后的区间标签:
import pandas as pd
# 创建一个DataFrame
data = pd.DataFrame({'values': [1, 5, 10, 15, 20]})
# 切分点
bins = [0, 5, 10, 15, 20, 100]
# 区间标签
labels = ['A', 'B', 'C', 'D', 'E']
# 使用cut函数进行分段处理
data['segment'] = pd.cut(data['values'], bins, labels=labels)
print(data)
运行以上代码,我们可以得到以下输出:
values segment
0 1 A
1 5 A
2 10 B
3 15 C
4 20 D
在这个示例中,我们通过labels参数指定了分段后的区间标签,生成了一个标签列segment。
区间右开左闭
在前面的示例中,我们看到默认情况下pandas.cut函数生成的区间是左开右闭的,即(0, 5]表示大于0且小于等于5的区间。如果我们需要的是右开左闭的区间,可以使用right=False参数:
import pandas as pd
# 创建一个DataFrame
data = pd.DataFrame({'values': [1, 5, 10, 15, 20]})
# 切分点
bins = [0, 5, 10, 15, 20, 100]
# 使用cut函数进行分段处理,并将区间设置为右闭左开
data['segment'] = pd.cut(data['values'], bins, right=False)
print(data)
运行以上代码,我们可以得到以下输出:
values segment
0 1 [0, 5)
1 5 [5, 10)
2 10 [10, 15)
3 15 [15, 20)
4 20 [20, 100)
区间变成了右开左闭的形式,使用方括号[)表示。
缺失值处理
在实际数据处理中,我们经常会遇到缺失值的情况。pandas.cut函数提供了na_value参数来处理缺失值。我们可以通过设置na_value参数为一个字符串或标量来指定缺失值的标签:
import pandas as pd
import numpy as np
# 创建一个带有缺失值的DataFrame
data = pd.DataFrame({'values': [1, 5, np.nan, 15, 20]})
# 切分点
bins = [0, 5, 10, 15, 20, 100]
# 使用cut函数进行分段处理,并对缺失值进行处理
data['segment'] = pd.cut(data['values'], bins, na_value='Missing')
print(data)
运行以上代码,我们可以得到以下输出:
values segment
0 1.0 (0, 5]
1 5.0 (0, 5]
2 NaN Missing
3 15.0 (15, 20]
4 20.0 (15, 20]
缺失值被标记为Missing。
通过数量划分区间
除了通过指定切分点外,我们还可以通过设置bins参数为一个整数来根据数据的数量来划分区间。pandas.cut函数会将数据平均分成指定数量的区间:
import pandas as pd
# 创建一个DataFrame
data = pd.DataFrame({'values': [1, 5, 10, 15, 20]})
# 指定区间数量
num_bins = 3
# 使用cut函数根据数量进行分段处理
data['segment'] = pd.cut(data['values'], num_bins)
print(data)
运行以上代码,我们可以得到以下输出:
values segment
0 1 (0.98, 7.0]
1 5 (0.98, 7.0]
2 10 (7.0, 13.0]
3 15 (13.0, 19.0]
4 20 (13.0, 19.0]
这里我们将数据分成了3个区间,每个区间的数据量大致相等。
小结
pandas.cut函数是pandas中非常实用的函数之一,可以方便地对数据进行分段处理。我们可以根据指定的切分点或数量来对数据进行分段,并且可以设置区间标签、处理缺失值等功能,灵活地应用在数据处理和分析的实际场景中。
极客教程