
在数据分析和处理中,我们经常需要将连续的数值数据离散化,即将其划分到不同的区间(或称“分箱”)。例如,将销售额数据按金额大小划分为“低”、“中”、“高”等档次。虽然可以通过编写复杂的条件判断逻辑来实现,但这往往会导致代码冗长、难以维护,并且在面对空区间等特殊情况时容易出错。pandas库提供了pd.cut函数,为这类需求提供了优雅且健壮的解决方案。
假设我们有一个包含数值变量的DataFrame,需要根据特定规则将其划分为多个区间。例如,将一个名为NUMERICAL_VARIABLE的列按照以下规则分箱:
手动实现时,我们可能会尝试:
这种方法存在明显弊端:
幸运的是,pd.cut函数本身就设计用于解决这类问题,并能直接指定精确的区间边界和自定义标签,从而避免上述所有问题。
pd.cut函数是Pandas中用于将数值数据离散化的核心工具。它能够根据指定的箱边(bins)将数据划分为不同的区间,并为每个区间分配标签。
假设我们有一个DataFrame df,其中包含一个名为 some_value 的数值列,我们希望将其按以下方式分箱:
import pandas as pd
import numpy as np
# 示例数据,包含可能超出预设最大边界的值
data = [1, 44746, 27637, 18236, 1000, 15000, 34000, 50000, 500]
df = pd.DataFrame({"some_value": data})
# 定义分箱边界和标签
# 注意:bins的起始值应小于或等于数据的最小值,结束值应大于或等于数据的最大值。
# 如果数据可能超出最大边界,且希望将超出部分归为一类,需要相应调整bins。
# 对于本例中明确的 '<45000' 需求,我们设置到45000。
# 如果有值大于45000,且未指定更大的bin,它们将默认为NaN。
bins = [0, 15000, 30000, 45000] # 定义精确的边界
labels = ["x < 15000", "x >= 15000 and x < 30000", "x >= 30000 and x < 45000"]
# 使用 pd.cut 进行分箱
# right=False 表示区间为 [min, max),即包含左边界,不包含右边界
# include_lowest=True 确保最小值为0的区间能够包含0
df['cutoffs'] = pd.cut(
df['some_value'],
bins=bins,
right=False,
labels=labels,
include_lowest=True # 确保像1这样的值能被包含在第一个区间 [0, 15000) 中
)
print("--- 原始分箱结果 (超出范围值为NaN) ---")
print(df)
#以上就是如何使用Pandas高效分割数值列为自定义区间的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号