替换数据框列中的日期大于参考日期的日期

时间:2019-10-17 14:12:23

标签: python pandas

我有一个数据框df,其中有日期,看起来像:

  DATE_OF_ENTRY
0    24/02/2019
1    01/08/2003
2    05/11/2002
3    03/02/2003
4    04/08/2003
5    05/02/2003
6    30/06/2003
7    01/03/2004
8    17/09/2001

我还有一个称为referencePeriodEndDate的参考日期变量,当前等于'31/03/2019'

如果列中的日期大于参考日期,我试图将DATE_OF_ENTRY列中的任何日期更改为“ NOT KNOWN”。因此,在上面的示例中,我将返回:

  DATE_OF_ENTRY
0     NOT KNOWN
1    01/08/2003
2    05/11/2002
3    03/02/2003
4    04/08/2003
5    05/02/2003
6    30/06/2003
7    01/03/2004
8    17/09/2001

数据框列和参考数据的类型为:

referencePeriodEndDate =  type <class 'str'>
DATE_OF_ENTRY =  type object

我尝试了以下方法:

referencePeriodEndDate =  parser.parse(referencePeriodEndDate)
referencePeriodEndDate =  referencePeriodEndDate.strftime('%d/%m/%Y')

df["DATE_OF_ENTRY"].loc[
    df["DATE_OF_ENTRY"] > referencePeriodEndDate, 
    'DATE_OF_ENTRY'
] = 'NOT KNOWN'

df["DATE_OF_ENTRY"] = np.where(
    df["DATE_OF_ENTRY"] > referencePeriodEndDate,
    "NOT KNOWN", df["DATE_OF_ENTRY"]
) 

没有成功。

1 个答案:

答案 0 :(得分:2)

使用pd.to_datetime()

referencePeriodEndDate = pd.to_datetime('31/03/2019')
df['DATE_OF_ENTRY'] = pd.to_datetime(df['DATE_OF_ENTRY'])

df['DATE_OF_ENTRY'] = df['DATE_OF_ENTRY'].where(
    df['DATE_OF_ENTRY'] <= referencePeriodEndDate, 'NOT KNOWN'
)