如何用pandas将DataFrame不规则年龄列规整为标准年龄区间?
Pandas不规则年龄列转标准连续区间实现方案
核心思路分两步:先统一清洗所有不规则格式的年龄值,提取区间边界;再通过分箱逻辑映射到需要的10年跨度标准区间。
步骤1:原始数据格式清洗
先处理三类异常格式:
- 多空格替代短横分隔的区间(如
41 45) - 带
or younger标记的低龄区间 - 带
or older标记的高龄区间
清洗时统一提取每个年龄值对应的区间上下限,存在临时列中备用,代码如下:
import pandas as pd # 实际使用时替换为你的CSV读取逻辑即可 # df = pd.read_csv("合并后的文件.csv") # 以下为样本测试数据 df = pd.DataFrame({ 'age': [ '51-55','41-45','41 45','46-50','36-40','46 50','26-30','21 25', '36 40','31 35','26 30','21-25','56 or older','31-35','56-60', '61 or older','20 or younger' ] }) def parse_age(value): value = value.strip() # 处理20 or younger类数据,下限按15起算 if 'or younger' in value: upper = int(value.replace('or younger', '').strip()) return 15, upper # 处理xx or older类数据,上限临时设为120(覆盖人类年龄上限即可) if 'or older' in value: lower = int(value.replace('or older', '').strip()) return lower, 120 # 处理短横、多空格分隔的普通区间,统一按空格分割取数字 value = value.replace('-', ' ') num_list = [int(i) for i in value.split() if i.isdigit()] return num_list[0], num_list[1] # 拆分出临时上下限列 df[['lower', 'upper']] = df['age'].apply(lambda x: pd.Series(parse_age(x)))
步骤2:映射到标准年龄区间
需要的标准区间为15-25、26-35、36-45这类10年跨度的连续区间,直接用pandas的cut分箱函数,以原始区间的下限为匹配依据即可自动归类:
# 自定义标准区间的分割边界和对应标签,可根据业务需求调整 bin_edges = [15, 26, 36, 46, 56, 66, 121] bin_labels = ['15-25', '26-35', '36-45', '46-55', '56-65', '66+'] # 执行分箱映射 df['age_standard'] = pd.cut( df['lower'], bins=bin_edges, labels=bin_labels, right=False, include_lowest=True ).astype(str) # 清洗临时列,输出最终结果 df = df.drop(columns=['lower', 'upper'])
映射结果校验
样本数据的最终匹配结果符合预期:
- 20 or younger、21-25、21 25 → 15-25
- 26-30、26 30、31-35、31 35 → 26-35
- 36-40、36 40、41-45、41 45 → 36-45
- 46-50、46 50、51-55 → 46-55
- 56-60、56 or older、61 or older → 56-65
如果需要调整高龄区间的划分(比如把61岁以上单独设为61+),直接修改bin_edges和bin_labels的取值即可,核心逻辑不需要改动。
内容的提问来源于stack exchange,提问作者eddie
相关产品推荐
相关产品推荐

