Python:无法在两个日期之间相减-类型错误

问题描述 投票:0回答:1

我目前拥有此代码,可以通过减去参考日期(当月第一天)和在线数据库中的出生日期之间的年龄。

我已经尝试更改每月第一天的获取方式,但这是唯一为我提供专栏的解决方案。当我尝试减去两列时,出现类型错误,并且我不知道如何解决。

我的数据:

dateBirth     dataRef
1977-08-29  2020-05-01
1995-04-13  2020-05-01
1981-07-21  2020-05-01

我的代码:

DOB = exec_sql('SELECT TOP 100 ID_Customer,D_BirthOrCompFoundation FROM Customer WHERE D_BirthOrCompFoundation IS NOT NULL;')

DOB['dateBirth'] = DOB['D_BirthOrCompFoundation'].apply(lambda x: datetime.strptime(x,'%Y-%m-%d'))

DOB['dataRef'] = datetime.today()
DOB['dataRef'] = DOB['dataRef'].dt.strftime("%Y-%m-01")

DOB['difDatas'] = DOB['dataRef'] - DOB['dateBirth']

#DOB['age'] = round(DOB['difDatas'].dt.days/(365.25),2)

print(DOB)

我收到的错误消息:

TypeError: cannot subtract DatetimeArray from ndarray

预期输出:

dateBirth       dataRef         difDatas          age
1977-08-29      2020-05-01      15590 days        42.xx
1995-04-13      2020-05-01      9154 days         25.xx
1981-07-21      2020-05-01      14168 days        38.xx

任何帮助将不胜感激,谢谢!

python datetime subtraction
1个回答
0
投票

假设您正在使用pandasto_datetime应该使您的生活更轻松,例如

import pandas as pd

# example df, with dates in string format:
DOB = pd.DataFrame({'dateBirth': ['1977-08-29', '1995-04-13', '1981-07-21']})

# parse dateBirth to datetime:
DOB['dateBirth'] = pd.to_datetime(DOB['dateBirth'])
# get a datetime64[ns] column with today's date:
DOB['dateRef'] = pd.to_datetime(pd.Timestamp.today().date())

DOB['difDates'] = (DOB['dateRef'] - DOB['dateBirth'])
DOB['age'] = (DOB['difDates'].dt.days / 365.25).round(2)

# DOB
#    dateBirth    dateRef   difDates    age
# 0 1977-08-29 2020-05-05 15590 days  42.68
# 1 1995-04-13 2020-05-05  9154 days  25.06
# 2 1981-07-21 2020-05-05 14168 days  38.79

重点是将所有具有日期/时间的列转换为dtype'datetime64 [ns]'的熊猫。然后算术运算就可以正常工作,例如[difDates]栏中的时间增量。

© www.soinside.com 2019 - 2024. All rights reserved.