Pandas 系列:将 DateTime 减 100 年
Pandas Series: Decrement DateTime by 100 Years
我有一个pandas系列如下...
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 中执行此操作
这里使用 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
模块来处理 non-fixed 频率,在这种情况下它会派上用场。
要修复您的代码,您可能希望使用 apply
逐行应用 datetime.replace
(不推荐):
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 条目。
我有一个pandas系列如下...
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 中执行此操作
这里使用 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
模块来处理 non-fixed 频率,在这种情况下它会派上用场。
要修复您的代码,您可能希望使用 apply
逐行应用 datetime.replace
(不推荐):
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 条目。