【问题标题】:Average age calculator using Python 3使用 Python 3 的平均年龄计算器
【发布时间】:2018-08-31 22:28:48
【问题描述】:

我正在尝试使用 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'

我花了很多时间找出问题所在,但到目前为止我还没有找到相关的答案。你能帮我解决这个问题吗?

【问题讨论】:

    标签: python python-3.x pandas datetime


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      使用 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')
      

      【讨论】:

        猜你喜欢
        • 2023-03-28
        • 2021-10-31
        • 2014-10-17
        • 1970-01-01
        • 2020-07-26
        • 1970-01-01
        • 1970-01-01
        • 2018-04-12
        • 2021-12-23
        相关资源
        最近更新 更多