You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何将年龄数据分箱为指定类别?解决pd.cut()的边界唯一错误

年龄分箱问题的解决方案

1. 先将年龄列转为数值类型

你之前替换缺失值后,F1: AGE列大概率还是object字符串类型,这会导致pd.cut无法正常工作,先转成数值型:

# 转换为数值,无法转换的自动设为NaN
df['F1: AGE'] = pd.to_numeric(df['F1: AGE'], errors='coerce')

2. 定义分箱边界与标签

按照需求设置唯一的边界区间,覆盖所有可能的年龄值:

  • 边界:[-float('inf'), 17, 25, 35, 45, 55, float('inf')]
  • 对应标签:['17岁及以下', '18-25岁', '26-35岁', '36-45岁', '46-55岁', '56岁以上']

3. 执行分箱并处理缺失值

用pd.cut完成分箱后,将缺失值(NaN)替换为「未知」:

# 设置分箱参数
bins = [-float('inf'), 17, 25, 35, 45, 55, float('inf')]
labels = ['17岁及以下', '18-25岁', '26-35岁', '36-45岁', '46-55岁', '56岁以上']

# 执行分箱,include_lowest=True确保17岁及以下的边界包含17
df['年龄分组'] = pd.cut(df['F1: AGE'], bins=bins, labels=labels, include_lowest=True)

# 将NaN替换为「未知」
df['年龄分组'] = df['年龄分组'].fillna('未知')

报错原因说明

你遇到的Bin edges must be unique错误,通常是两个原因:

  • 年龄列不是数值类型,pd.cut无法识别边界逻辑
  • 手动设置的边界存在重复值(比如重复写了同一个数字)

完整可运行代码

import pandas as pd
import numpy as np

# 你的初始处理代码
age_index = df['F1: AGE'].str.isnumeric()
age_index = age_index.fillna(False)
df.loc[~age_index, 'F1: AGE'] = np.nan

# 转换为数值类型
df['F1: AGE'] = pd.to_numeric(df['F1: AGE'], errors='coerce')

# 分箱生成分组
bins = [-float('inf'), 17, 25, 35, 45, 55, float('inf')]
labels = ['17岁及以下', '18-25岁', '26-35岁', '36-45岁', '46-55岁', '56岁以上']
df['年龄分组'] = pd.cut(df['F1: AGE'], bins=bins, labels=labels, include_lowest=True)
df['年龄分组'] = df['年龄分组'].fillna('未知')

内容的提问来源于stack exchange,提问作者drizzlesworld

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.20 06:45:33