我的数据框df
包含date of birth
列。头部看起来像:
Date of birth
0 1957-04-30
1 1966-11-10
2 1966-11-10
3 NOT KNOWN
4 1958-10-28
5 1958-06-04
我还有一个名为referencePeriodEndDate
的变量,它是yyyy-mm-dd
格式的日期,例如2017-03-31
我正在尝试创建一个名为Age
的新列,其年龄从Date of birth
到referencePeriodEndDate
所以应用于每一行的功能如下:
(`referencePeriodEndDate` - df["Date of birth"]) / 365.25
Date of birth
列中的行可能为空(null
)或条目'NOT KNOWN'
,因此我需要将值'NOT KNOWN'
返回到在新的年龄列中受影响column
。
我已经提出以下内容但它拒绝工作(或返回错误)
df["Age"].apply(lambda row: TimeCalc(df,referencePeriodEndDate) if row.notnull() else "NOT KNOWN")
def TimeCalc(rawDatabase,referencePeriodEndDate):
Age = ((referencePeriodEndDate - rawDatabase["Date of birth"]) / 365.25)
return Age
所需的输出如下:
Date of birth Age
30/04/1957 59.91786448
10/11/1966 50.38740589
10/11/1966 50.38740589
NOT KNOWN NOT KNOWN
28/10/1958 58.42299795
04/06/1958 58.82272416
答案 0 :(得分:1)
您可以使用to_datetime
df['Dateofbirth']=pd.to_datetime(df['Dateofbirth'],errors='coerce')
df['Age']=(pd.to_datetime('2017-03-31')-df['Dateofbirth']).dt.days/365.25
df.fillna('unknow')
Out[370]:
Dateofbirth Age
0 1957-04-30 00:00:00 59.9179
1 1966-11-10 00:00:00 50.3874
2 1966-11-10 00:00:00 50.3874
3 unknow unknow
4 1958-10-28 00:00:00 58.423
5 1958-06-04 00:00:00 58.8227