datetime.now() 和一个充满日期的系列之间的 Python 年份差异?

Posted

技术标签:

【中文标题】datetime.now() 和一个充满日期的系列之间的 Python 年份差异?【英文标题】:Python difference in years between a datetime.now() and a Series filled up with dates? 【发布时间】:2018-08-10 19:29:29 【问题描述】:

我想在我的数据集中创建一个新列,这是今天与数据集中已有的另一列之间的年差,其中填充了日期。

上面的代码:

df['diff_years'] = datetime.today() - df['some_date']
df['diff_years']

给我以下输出(示例):

1754 days 11:44:28.971615

我必须得到类似的东西(意思是上面几年的输出):

4,8 
(or 5)

感谢您的帮助!

PS.:我想避免循环播放该系列,我相信路径会给我一个理想的解决方案,但由于系列很大,我想避免这种方式。

【问题讨论】:

嗯,一年的定义并不准确。它可以有 365 到 366 天。或者,如果您回溯到更远的历史,那就更复杂了。 @Wagner 我认为熊猫日期差异在这种情况下没有用,您应该将熊猫日期转换为日期时间,并且应该使用 relativedelta,因为它会给您带来年份、剩余月份和日期的差异。希望对你有帮助 【参考方案1】:

这是一种方法:

import pandas as pd, numpy as np

df = pd.DataFrame('date': ['2009-06-15 00:00:00'])

df['years'] = (pd.to_datetime('now') - pd.to_datetime(df['date'])) / np.timedelta64(1, 'Y')

#                   date     years
# 0  2009-06-15 00:00:00  8.713745

【讨论】:

我得到了输出:OutOfBoundsDatetime:超出范围纳秒时间戳:60824-01-01 00:00:00。顺便说一句,我的日期系列是 2009-06-15 00:00:00 格式 @WagnerR。查看我的更新 - 它仍然有效。您需要提供一些可重现的代码来帮助调试。【参考方案2】:

前几天我在我的项目中遇到了同样的问题,现在我已经尝试过这些,

from dateutil.relativedelta import relativedelta
from datetime import date
now = date.today()
some_date = date(df['some_date'])

rdelta = relativedelta(now, some_date)
print('diff in years - ', rdelta.years)
print('remaining months - ', rdelta.months)
print('remaining days - ', rdelta.days)

它应该以年为单位打印差异

【讨论】:

以上是关于datetime.now() 和一个充满日期的系列之间的 Python 年份差异?的主要内容,如果未能解决你的问题,请参考以下文章

datetime处理日期和时间

datetime处理日期和时间

datetime处理日期和时间

datetime处理日期和时间

datetime处理日期和时间

datetime处理日期和时间