使用Python 3的平均年龄计算器

时间:2018-08-31 22:28:48

标签: python python-3.x pandas datetime

我正在尝试使用Python3计算平均年龄(年+月格式)。我加载了一个excel文件,并在下面编写了代码:

import datetime
from datetime import date, timedelta

import pandas as pd
from pandas import ExcelFile

today = date.today()

agefile = pd.read_excel("test.xlsx", sheet_name = "birthdate")

age = pd.to_datetime(agefile["birthdate"], format = "%d/%m/%Y")

average_age = sum(((today - x) for x in age), timedelta(0)) / len(age)

最后一行无效。它给了我这样的错误消息:

descriptor '__sub__' requires a 'datetime.datetime' object but received a 'datetime.date'

我花了大量时间弄清楚问题出在哪里,但是到目前为止,我还没有找到相关的答案。您能帮我解决这个问题吗?

2 个答案:

答案 0 :(得分:1)

date.today()date,而x中的age都是datetime。将date.today()更改为datetime.today(),错误应消失。

答案 1 :(得分:0)

对于Pandas,您应该致力于使用矢量化计算,而不是转换为常规的Python datetime对象。在内部,Pandas pd.Timestamp对象用整数表示,因此可以进行高效的计算。

因此,您可以执行以下操作:

# create series of dates containing birthdates
birthdate = pd.to_datetime(agefile['birthdate'], format='%d/%m/%Y')

# subtract from today's date
age = pd.to_datetime('today') - birthdate

# calculate average age
avg_age = age.mean()

这是一个最小的例子:

s = pd.Series(['2010-01-01', '2011-11-30'])
res = (pd.to_datetime('today') - pd.to_datetime(s)).mean()

# Timedelta('2815 days 23:39:13.331568')