gpt4 book ai didi

Pandas 系列 : Decrement DateTime by 100 Years

转载 作者:行者123 更新时间:2023-12-04 14:19:16 25 4
gpt4 key购买 nike

我有一个 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 模块来处理非固定频率,在这种情况下它会派上用场。


要修复您的代码,您可能希望使用 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 系列 : Decrement DateTime by 100 Years,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56764860/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com