如何在Pandas中将年、月、日形式的服务年限转换为浮点值
解决DataFrame中Years_in_service转十进制年数的问题
完整实现代码
import pandas as pd import numpy as np data = {'ID':['A1001','A5001','B1001','D5115','K4910'], 'Years_in_service': ['5 year(s), 7 month(s), 3 day(s)', '16 year(s), 0 month(s), 25 day(s)', '7 year(s), 0 month(s), 2 day(s)', '0 year(s), 11 month(s), 23 day(s)','1 year(s), 0 month(s), 6 day(s)'], 'Age': [45, 59,21,18,35]} df = pd.DataFrame(data) # 从字符串中提取年、月、日的数值 df[['years', 'months', 'days']] = df['Years_in_service'].str.extract(r'(\d+) year\(s\), (\d+) month\(s\), (\d+) day\(s\)').astype(float) # 计算以年为单位的十进制值:年数 + 月数/12 + 天数/365 df['Years_in_service_decimal'] = df['years'] + df['months']/12 + df['days']/365 # 保留两位小数,匹配示例中的5.59格式 df['Years_in_service_decimal'] = df['Years_in_service_decimal'].round(2) # 输出结果 print(df)
关键步骤说明
- 数值提取:利用正则表达式精准捕获字符串中的年、月、日数字,通过
str.extract直接拆分成三列,再转成浮点类型用于计算。 - 单位转换:基于一年12个月、一年365天的近似值,把月和天换算成年的小数部分,相加后得到总服务时长的十进制年数。
- 格式调整:用
round(2)把结果保留两位小数,和你提供的示例输出一致。
内容的提问来源于stack exchange,提问作者RayX500
相关产品推荐
相关产品推荐

