通过日期的相减计算年龄

有时候我们需要通过日期的加减来计算年龄,以下函数呢就是一个可以简单进行年龄计算的函数啦~

from datetime import datetime
def calculate_age(start_time,end_time):
    try:
        if start_time != "None" and end_time != "None":
            start_d = datetime.strptime(start_time, "%d-%b-%y")
            end_d = datetime.strptime(end_time, "%d-%b-%y")
            #因为这里用的是两位数的年份,所以要考虑到相减为负数的情况!(比如2020-1990本来应该是30岁,但是20-90结果却是-70)
            #所以要先进行一个大小比较
            if start_d.year >  end_d.year:
                if end_d.month > start_d.month:
                    age = 100 + (end_d.year - start_d.year)
                else:
                    age = 100 + (end_d.year - start_d.year) - 1
            else:
                if end_d.month > start_d.month:
                    age = end_d.year - start_d.year
                else:
                    age = end_d.year - start_d.year -1

    except:
        age = None
    return age
    

默认start_timeend_time 两个日期均以字符串的形式输入,函数datetime.strptime可以把字符串按照固定的格式转换为时间类变量。其中“%d-%b-%y"对应输入字符串的简写格式。一些常用的格式如下:

  • %y 两位数的年份表示(00-99)
  • %a 英文星期简写
  • %A 英文星期的完全
  • %b 英文月份的简写
  • %B 英文月份的完全
  • %c 显示本地日期时间
  • %d 日期,取1-31
  • %H 小时, 0-23
  • %I 小时, 0-12
  • %m 月, 01 -12
  • %M 分钟,1-59
  • %j 年中当天的天数
  • %w 显示今天是星期几
  • %W 第几周
  • %x 当天日期
  • %X 本地的当天时间
  • %y 年份 00-99间
  • %Y 年份的完整拼写

因为我写这个函数是为了使用两列不同的日期特征生成新的一列表示年龄的特征,所以接下来就需要应用到数据集中啦:

for i in range(0,len(data)):
    data.at[i,'Age'] = calculate_age(str(data.at[i,'birthDate']),str(data.at[i,'endDate']))

其中有两个小小坑:
(1)当输入 start_timeend_time 有空值时,是不能转换为日期的,即,当 birthDateendDate 两个特征中中存在空值时,是无法计算对应的Age的。所以函数中将空值进行了一个过滤 if start_time != None and end_time != None,保证进入转换和相减的日期都是干净的。同时,加入异常处理模块,如果遇到异常,则对应的年龄赋值为零。
(2)因为我这里用的是两位数的年份,所以要考虑到相减为负数的情况。比如2020-1990本来应该是30岁,但是使用两位数年份20-90结果却是-70,所以要先进行一个大小比较,再分类进行相减。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值