我有一个熊猫数据框,其中有一列“ dob”(出生日期),我希望根据今天的日期计算年龄
我使用datetime模块调用今天,并从今天减去'dob'字段,然后将其除以365以得到以年为单位的年龄。
我承认这是一种相当粗糙的方法,我正在寻找一些提示以使其更优雅。
# -*- coding: utf-8 -*-
import pandas as pd
from datetime import datetime
today = datetime.today()
df = pd.read_csv(pathtocsvfile, parse_dates=['dob'])
df['age'] = df['dob'].apply(lambda x: (today - x).days // 365)
我相信代码可以正常工作,但是我不确定多少leap年会影响结果。
我也在寻找一种优雅的方式来实现这一目标。
答案 0 :(得分:0)
如果您要年龄,我建议您
df['age'] = df['dob'].apply(
lambda x: today.year - x.year -
((today.month, today.day) < (x.month, x.day))
)
而不是花费数天除以365,这并不总是准确的,并且可能导致错误的结果。
答案 1 :(得分:0)
您通过坚持数年来引入不准确性。您的目标也将按您已经拥有的天数来实现。只需将整数除以365。
答案 2 :(得分:0)
要计算年龄,请使用以下算法:
在代码中:
dob = '17-12-1965'
dob_date = datetime.strptime(dob, '%d-%m-%Y')
now_date = datetime.today()
age = int(
(now_date.year*10000 + now_date.month*100+now_date.day) - \
(dob_date.year*10000 + dob_date.month*100+dob_date.day)
) / 10000)