Python中如何将数据集年龄列的数值转换为对应文本标签?
问题原因
- 第二种方法核心错误:Pandas的Series布尔判断不能使用Python原生逻辑运算符
and/or,必须使用位运算符&/|,且每个判断条件必须用小括号单独包裹,避免运算符优先级冲突 - 两种方法共有的隐含错误:直接修改原
age列的数值为字符串,会导致后续针对age的数值比较逻辑失效(字符串无法和整数做大小比较),越靠后的判断条件越容易触发报错 - 第一种方法缺少18-24岁的分段规则,该区间的年龄无法被匹配到对应标签
正确实现方案
方案1:修正原生loc写法(适配原有逻辑)
优先新建标签列,不修改原始年龄数值,避免影响后续其他数据计算:
# 先初始化空的标签列 df['age_label'] = '' df.loc[(df['age'] >= 18) & (df['age'] <= 24), 'age_label'] = 'young adults' df.loc[(df['age'] >= 25) & (df['age'] <= 34), 'age_label'] = 'middle aged adults' df.loc[(df['age'] >= 35) & (df['age'] <= 49), 'age_label'] = 'older adults' df.loc[df['age'] >= 50, 'age_label'] = 'elderly'
方案2:使用pd.cut方法(更简洁高效)
针对分箱打标签的场景,Pandas内置的cut方法不用写多行判断逻辑,性能更高,代码更易维护:
import pandas as pd # 定义分箱边界和对应标签,边界值设置为17是为了兼容18岁的取值 bins = [17, 24, 34, 49, float('inf')] labels = ['young adults', 'middle aged adults', 'older adults', 'elderly'] # right=True表示分箱区间为左开右闭,(17,24]即对应18到24岁 df['age_label'] = pd.cut(df['age'], bins=bins, labels=labels, right=True)
如果需要覆盖18岁以下的年龄区间,直接调整bins和labels参数即可。
内容的提问来源于stack exchange,提问作者Maryna Azeez
相关产品推荐
相关产品推荐

