Python 在pandas.DataFrame中更改年份

Python 在pandas.DataFrame中更改年份,python,pandas,dataframe,datetime,Python,Pandas,Dataframe,Datetime,我有大量的时间序列数据,我想在一定范围内将所有年份更改为1900年(例如)。我的MWE是 import pandas as pd from datetime import date df = pd.DataFrame({ 'name': ['alice','bob','charlie'], 'date_of_birth': ['10/25/2005','10/29/2002','01/01/2001']}) # convert to type datetime df['dat

我有大量的时间序列数据,我想在一定范围内将所有年份更改为1900年(例如)。我的MWE是

import pandas as pd
from datetime import date

df = pd.DataFrame({
    'name': ['alice','bob','charlie'],
    'date_of_birth': ['10/25/2005','10/29/2002','01/01/2001']})

# convert to type datetime
df['date_of_birth'] = pd.to_datetime(df['date_of_birth'])
print(df)

df['date_of_birth'] = df['date_of_birth'].mask(df['date_of_birth'].dt.year > 2000, \
                         df['date_of_birth'] - pd.to_timedelta(100, unit='y') + \
                         pd.to_timedelta(12, unit='h'))
print(df)
此方法会更改年份、月份和天数。有没有办法只改变年份而不改变其他一切?

我们可以使用:


为什么要在时间增量(12,unit='h')中添加
pd.
?你需要它,否则这是一个测试?你是对的,那一点是没有必要的
s = df["date_of_birth"].apply(lambda x: x.replace(year=1900))
df["date_of_birth"] = np.where(df["date_of_birth"].dt.year > 2000, s, df["date_of_birth"])
      name date_of_birth
0    alice    1900-10-25
1      bob    1900-10-29
2  charlie    1900-01-01