首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用Python 3的平均年龄计算器

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

Stack Overflow用户
提问于 2018-09-01 06:28:48
回答 2查看 865关注 0票数 2

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

代码语言:javascript
复制
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)

最后一行不起作用。它给我一条错误消息,如下所示:

代码语言:javascript
复制
descriptor '__sub__' requires a 'datetime.datetime' object but received a 'datetime.date'

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

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-09-01 06:39:51

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

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

代码语言:javascript
复制
# 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()

下面是一个最小的例子:

代码语言:javascript
复制
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')
票数 0
EN

Stack Overflow用户

发布于 2018-09-01 06:32:47

date.today()是一个date,而age中的x都是datetime,把date.today()改成datetime.today(),这个错误就会消失。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52123263

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档