【问题标题】:How to subtract number of years from a date in python? [duplicate]如何从python中的日期减去年数? [复制]
【发布时间】:2020-03-29 10:39:44
【问题描述】:

数据

我有以下数据:

data = [['1987-09-01', 5], ['1987-09-01', 2.66], ['1987-09-01', np.nan]]
df = pd.DataFrame(data, columns=['Date', 'year'])
df['Date'] = pd.to_datetime(df['Date'])

目标

从日期中减去年数。对于 np.nan,我不希望减去任何值。

尝试

我的尝试如下:

df['Date'] - pd.to_timedelta(df.year.astype(str), units = 'Y')

这会导致以下错误:

ValueError: no units specified

我知道 pd.to_timedelta 不支持年数。我想知道如何以另一种方式实现我的目标?

【问题讨论】:

  • 认为您可能会这样做(未经测试):df['Date'] - pd.to_timedelta(df.year.fillna(0), unit='y')? (注意它是unit(单数)- 不是复数)
  • 这能回答你的问题吗? Subtract an year from a datetime column in pandas
  • YM 已被弃用,因为它们不代表固定的时间量。为了实现你想要的,你应该考虑一年对你来说代表什么。 - 如果您理解“一年”的意思是“365 天”,只需将增量乘以 365 并使用 day 作为单位(在这种情况下,您可能希望使用 1 年 = 365.25 天,以考虑闰年)。 - 如果 1 年的变化意味着下一年/上一年的同一天,只需从年份字段中添加/减去增量的整数部分并决定如何使用增量的剩余小数部分(问问自己一年的 0.66意思)。
  • 然而,尽管Y 已被弃用,但正如@JonClements 所说,它仍然有效。

标签: python pandas time


【解决方案1】:

pd.DateOffset 应该适合你

df['Date'] = pd.to_datetime(df['Date'])
df['Date'] = df['Date'] - pd.DateOffset(years=1)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2022-01-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-31
    • 2011-02-14
    • 1970-01-01
    • 2015-02-22
    相关资源
    最近更新 更多