在python中,如何从日期中减去年数? 数据

在python中,如何从日期中减去年数? 数据,python,pandas,time,Python,Pandas,Time,我有以下数据: 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

我有以下数据:

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中不支持年数。我想知道如何用另一种方式实现我的目标?

pd.DateOffset
应该适合你

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

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