Калькулятор среднего возраста с использованием Python 3 - PullRequest
0 голосов
/ 01 сентября 2018

Я пытаюсь рассчитать среднее значение возраста (формат год + месяц), используя 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 голосов
/ 01 сентября 2018

С 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')
0 голосов
/ 01 сентября 2018

date.today() - это date, в то время как x в age - все datetime с. Измените date.today() на datetime.today(), и ошибка должна исчезнуть.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...