【发布时间】: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(单数)- 不是复数) -
Y和M已被弃用,因为它们不代表固定的时间量。为了实现你想要的,你应该考虑一年对你来说代表什么。 - 如果您理解“一年”的意思是“365 天”,只需将增量乘以 365 并使用day作为单位(在这种情况下,您可能希望使用 1 年 = 365.25 天,以考虑闰年)。 - 如果 1 年的变化意味着下一年/上一年的同一天,只需从年份字段中添加/减去增量的整数部分并决定如何使用增量的剩余小数部分(问问自己一年的 0.66意思)。 -
然而,尽管
Y已被弃用,但正如@JonClements 所说,它仍然有效。