在Mongosh中将字符串转整数,计算诺贝尔奖得主获奖时年龄
计算诺贝尔奖获奖者获奖时的年龄
方法一:Python Pandas(快速年份差计算)
如果已经能截取出生年份字符串,直接转整数后做减法即可:
- 提取出生年份并转换为整数:
import pandas as pd # 假设你的数据集是df,包含birth_date和award_year列 df['birth_year'] = df['birth_date'].str[:4].astype(int) - 计算获奖年龄:
df['award_age'] = df['award_year'] - df['birth_year']
也可以一步完成,省去中间列:
df['award_age'] = df['award_year'] - df['birth_date'].str[:4].astype(int)
如果存在birth_date为空的情况,用apply处理缺失值:
df['award_age'] = df.apply( lambda row: row['award_year'] - int(row['birth_date'][:4]) if pd.notna(row['birth_date']) else None, axis=1 )
方法二:更精确的年龄计算(考虑生日月份)
如果要准确判断获奖者当年是否过了生日,避免年份差多算1岁,可以用日期类型计算:
# 转换birth_date为日期格式,无效日期设为NaN df['birth_date'] = pd.to_datetime(df['birth_date'], errors='coerce') # 假设诺贝尔奖颁奖日期为每年12月10日,生成获奖日期 df['award_date'] = pd.to_datetime(df['award_year'].astype(str) + '-12-10') # 计算精确年龄(取年份整数部分) df['award_age'] = (df['award_date'] - df['birth_date']).astype('<m8[Y]')
方法三:SQL场景(如果数据存在数据库中)
如果你的数据集存储在SQL数据库中,用字符串截取+类型转换实现:
- MySQL:
SELECT award_year - CAST(SUBSTRING(birth_date, 1, 4) AS UNSIGNED) AS award_age FROM nobel_winners; - PostgreSQL:
SELECT award_year::INT - SUBSTRING(birth_date FROM 1 FOR 4)::INT AS award_age FROM nobel_winners;
内容的提问来源于stack exchange,提问作者Le_user
相关产品推荐
相关产品推荐

