我的熊猫系列如下...
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中做到这一点
答案 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条目。