我正在尝试使用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'我花了大量的时间弄清楚问题是什么,但到目前为止我还没有找到相关的答案。你能帮我解决这个问题吗?
发布于 2018-09-01 06:39:51
对于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')发布于 2018-09-01 06:32:47
date.today()是一个date,而age中的x都是datetime,把date.today()改成datetime.today(),这个错误就会消失。
https://stackoverflow.com/questions/52123263
复制相似问题