我注意到 pandas 包的一个奇怪行为,导致在某些情况下添加时间偏移意外失败。
假设我有以下数据框:
df = pd.DataFrame({'time': ['2022-01-24', '2022-02-24', '2022-03-24'],
'value': [10, 20, 30]})
我可以使用以下语法成功为其添加时间偏移:
df.set_index(['time'], inplace=True)
df.index = pd.to_datetime(df.index, format='%Y-%m-%d')
df.index = df.index + pd.offsets.DateOffset(years=100)
但是当我只想将偏移量添加到数据帧的子集时,例如,会失败。仅适用于
2022-02-25
之后的日期,请参阅下文:
df.set_index(['time'], inplace=True)
df.index = pd.to_datetime(df.index, format='%Y-%m-%d')
df[df.index>pd.to_datetime('2022-02-25')].index = df[df.index>pd.to_datetime('2022-02-25')].index + pd.offsets.DateOffset(years=100)
第二个代码条导致
time
的df
列没有变化。为什么当我只添加到切片时没有任何变化?我该如何成功地做到这一点? Tnx
您可以尝试使用新值设置整个索引(而不仅仅是其中的一部分):
mask = df.index > pd.to_datetime("2022-02-25")
df.index = (
*df[~mask].index,
*(df[mask].index + pd.offsets.DateOffset(years=100)),
)
print(df)
打印:
value
2022-01-24 10
2022-02-24 20
2122-03-24 30