熊猫系列:将DateTime减少100年

时间:2019-06-26 03:42:46

标签: pandas datetime date-conversion

我的熊猫系列如下...

0  2039-03-16 
1  2056-01-21 
2  2051-11-18 
3  2064-03-05 
4  2048-06-05

Name: BIRTH, dtype: datetime64

它是根据如下字符串数据创建的

s = data['BIRTH']
s = pd.to_datetime(s)
s

我想将2040年之后的所有日期转换为1940年

我可以为一条记录执行以下操作

s.iloc[0].replace(year=d.year-100)

但是我真的很想在整个系列中使用它。我无法解决。救命!!

PS-我知道在Pandas之外还有使用Python的DT模块的方法,但是我想学习如何在Pandas中做到这一点

1 个答案:

答案 0 :(得分:2)

在这里使用DateOffset是显而易见的选择:

df['date'] - pd.offsets.DateOffset(years=100)

0   1939-03-16
1   1956-01-21
2   1951-11-18
3   1964-03-05
4   1948-06-05
Name: date, dtype: datetime64[ns]

重新分配:

df['date'] -= pd.offsets.DateOffset(years=100)
df
        date
0 1939-03-16
1 1956-01-21
2 1951-11-18
3 1964-03-05
4 1948-06-05

我们有offsets模块来处理非固定频率,在这种情况下它非常有用。


要修复代码,您想使用datetime.replace按行应用apply(不推荐):

df['date'].apply(lambda x: x.replace(year=x.year-100))

0   1939-03-16
1   1956-01-21
2   1951-11-18
3   1964-03-05
4   1948-06-05
Name: date, dtype: datetime64[ns]

或者使用列表推导,

df.assign(date=[x.replace(year=x.year-100) for x in df['date']])

        date
0 1939-03-16
1 1956-01-21
2 1951-11-18
3 1964-03-05
4 1948-06-05

这些都不能很好地处理NaT条目。