在DOB中有条件更改年份

时间:2019-03-29 18:37:31

标签: python pandas datetime

我有一个“日期”列,我将其清除后将所有日期更改为相同的格式(日期/月/年)。

由于最初某些日期以年份末尾的两位数表示,例如。 SELECT NEXT VALUE FOR MY_SEQUENCE ,他们被转换为2/7/95。但是,我需要将21世纪到20世纪的日期更改为年,所以02/07/2095-> 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

3 个答案:

答案 0 :(得分:0)

基于此...

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']是熊猫的日期时间序列。

答案 1 :(得分:0)

dt.strftime将日期时间转换为其他格式,但是column的dtype将是object(字符串)。

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')

答案 2 :(得分:-1)

已更新一种解决方案。

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']))