在熊猫数据框中计算年龄

时间:2019-05-16 13:55:53

标签: python pandas datetime

我有一个熊猫数据框,其中有一列“ 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年会影响结果。

我也在寻找一种优雅的方式来实现这一目标。

3 个答案:

答案 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)

要计算年龄,请使用以下算法:

  1. 将dob表示为数字,格式为YYYYMMDD
  2. 将当前日期表示为数字,格式为YYYYMMDD
  3. 减去两个数字
  4. 将结果除以10000
  5. 从此结果中获取整数

在代码中:

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)