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

Pandas年龄列混存字符串整数 分桶时报str与int比较类型错误

报错根因

你当前DataFrame的age列存储的是区间类字符串值(比如20 or younger、26 30这类),不是单个整数年龄,列数据类型为字符串型(object)。原age_buckets函数的逻辑是将输入值和整数做大小比较,字符串和整数无法直接做<运算,因此触发TypeError。

你现有age列的原始取值及对应计数整理如下:

  • 20 or younger:14条
  • 61 or older:45条
  • 56-60:34条
  • 31-35:30条
  • 56 or older:31条
  • 21-25:23条
  • 26 30:56条(连字符缺失,实际为26-30区间)
  • 31 35:44条(连字符缺失,实际为31-35区间)
  • 36 40:32条(连字符缺失,实际为36-40区间)
  • 21 25:26条(连字符缺失,实际为21-25区间)
  • 26-30:14条
  • 46 50:14条(连字符缺失,实际为46-50区间)
  • 36-40:15条
  • 46-50:33条
  • 41 45:24条(连字符缺失,实际为41-45区间)
  • 41-45:29条
  • 51-55:35条
解决方案

针对当前字符串格式的年龄区间数据,不需要提取单个年龄值,直接做格式归一化+映射匹配即可完成分桶,代码可直接复用:

import pandas as pd

# 定义原始年龄区间到目标标准分桶的映射规则
age_mapping = {
    "20 or younger": "18-29",
    "21-25": "18-29",
    "26-30": "18-29",
    "31-35": "30-39",
    "36-40": "30-39",
    "41-45": "40-49",
    "46-50": "40-49",
    "51-55": "50-59",
    "56-60": "50-59",
    "56 or older": "50-59",
    "61 or older": "60-69"
}

# 统一区间格式:把空格分隔的区间替换为横杠连接,再把带or的描述还原
df["age_temp"] = df["age"].str.replace(r"\s+", "-", regex=True)
df["age_temp"] = df["age_temp"].str.replace("-or-", " or ")

# 映射得到标准分桶,未匹配到的内容归为other
df["age_bucket"] = df["age_temp"].map(age_mapping).fillna("other")

# 用完可以删除临时列
df = df.drop(columns=["age_temp"])

补充:如果后续你拿到的age列是单个年龄数值,原来写的age_buckets函数可以正常使用,只要提前把列转为数值类型即可:df["age"] = pd.to_numeric(df["age"], errors="coerce"),转完类型再应用函数就不会触发类型错误。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.26 20:27:25