【问题标题】:Getting the current age using datetime library使用日期时间库获取当前年龄
【发布时间】:2020-04-04 08:37:25
【问题描述】:

我有一列用户的出生日期数据,格式为 datetime64[ns],并且想计算他们当前的年龄。每次我解析这个日期并尝试用当前日期减去相同的日期时,都会引发 str 和 datetime 数据格式无效的错误。

from datetime import datetime
main_file['AD_DOB'] = pd.to_datetime(main_file['AD_DOB']).dt.date ##10/2/1943
now = datetime.now().strftime("%H:%M:%S")
main_file['Age'] = ((now - main_file['AD_DOB'])/365).dt.days

错误:TypeError:不支持的操作数类型 -: 'str' 和 'datetime.date'

【问题讨论】:

    标签: python-3.x pandas datetime


    【解决方案1】:

    因为datetime.now().strftime("%H:%M:%S")返回的是一个字符串对象

    以下应该可以:

    now = datetime.now()
    main_file['Age'] = (now - main_file['AD_DOB']).days/365.0
    

    【讨论】:

    • 仍然抛出一个错误:TypeError: unsupported operand type(s) for -: 'datetime.datetime' 和 'datetime.date'。但是,它与其他解决方案配合得很好。还是谢谢!
    【解决方案2】:

    试试这个

    from datetime import datetime
    main_file['AD_DOB'] = pd.to_datetime(main_file['AD_DOB']).dt.date ##10/2/1943
    now = datetime.datetime.now()
    main_file['Age'] = ((now - main_file['AD_DOB'])/365).dt.days
    

    【讨论】:

    • 它在最新版本 0.25.3 上运行。
    【解决方案3】:

    对于 pandas 中的减法,必须将值转换为日期时间,如果要删除时间,请使用 Series.dt.floor 用于 AD_DOB 列,并且对于 now 使用 Timestamp.floor

    main_file = pd.DataFrame({'AD_DOB':['10/2/1943','10/8/1946','10/12/1983']})
    main_file['AD_DOB'] = pd.to_datetime(main_file['AD_DOB']).dt.floor('d')
    now = pd.to_datetime('now').floor('d')
    main_file['Age'] = ((now - main_file['AD_DOB'])/365).dt.days
    print (main_file)
          AD_DOB  Age
    0 1943-10-02   76
    1 1946-10-08   73
    2 1983-10-12   36
    

    【讨论】:

      猜你喜欢
      • 2016-03-22
      • 1970-01-01
      • 1970-01-01
      • 2019-03-09
      • 2020-04-04
      • 1970-01-01
      • 2016-07-20
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多