出生日期有条件变更年份

2024-04-20 05:47:28 发布

您现在位置:Python中文网/ 问答频道 /正文

我有一个'日期'栏,我清理,以改变所有日期相同的格式(日期/月/年)。你知道吗

因为最初一些日期以两位数结束,例如2/7/95,所以它们被转换成02/07/2095。但是,我需要把21世纪的年份改成20世纪,所以20yy->;19yy。你知道吗

这是我目前的职责:

df['date'] = pd.to_datetime(df['date']).dt.strftime('%d/%m/%Y')

输入->;函数输出->;预期输出:

 07/12/02  -> 07/12/2002 -> 07/12/1902
 07-Sep-09 -> 07/09/2019 -> 07/09/1919

如何:

  • 提取函数后的年份部分
  • 检查是否需要更改
    • 如果是,则更改年份

我试过这个:

year= pd.DatetimeIndex(df['date']).year 
if year.any() > 2000:
    subset['date']= pd.Timedelta(pd.offsets.year(1000))

Tags: to函数gtdfdatetimedate格式dt
3条回答

已更新单线解决方案。

df=pd.DataFrame({'date':['07/12/02','07/09/19']})
df['date']=np.where( pd.to_datetime(df['date']).dt.year>2000,( pd.to_datetime(df['date']) - pd.DateOffset(years=100)), pd.to_datetime(df['date']))

dt.strftime将datetime转换为其他格式,但列的数据类型将是object(string)。你知道吗

df['date'] = pd.to_datetime(df['date']).apply(lambda x: 
             x - pd.DateOffset(years=100) if x.year >= 2000 else x)

如果您想再次使用相同的日期时间格式

df['date'] = pd.to_datetime(df['date']).apply(lambda x: 
             x - pd.DateOffset(years=100) if x.year >= 2000 else x).dt.strftime('%d/%m/%Y')

基于此。。。你知道吗

year= pd.DatetimeIndex(df['date']).year 
if year.any() > 2000:
    subset['date']= pd.Timedelta(pd.offsets.year(1000))

你好像喜欢

subset['date'] = subset['date'].mask(subset['date'].dt.year > 2000, 
                                     subset['date'] - pd.DateOffset(years=100))

如果是2000年以上的,从这个日期减去100年。如果条件(参数1)失败,则保留原始值。你知道吗

注意,这个答案假设subset['date']是一个时间序列。你知道吗

相关问题 更多 >