在我的数据框中,有一个日期列,格式为“%d /%m /%Y”。
我想用今天的日期替换大于今天的日期。
EX: Date
--------
10/05/2019
06/06/2019
20/08/2019
30/09/2020
预期输出:
Date
------------
10/05/2019
06/06/2019
06/06/2019
06/06/2019
答案 0 :(得分:2)
将列转换为日期时间,比较并设置今天的日期:
df['Date'] = pd.to_datetime(df['Date'], format='%d/%m/%Y')
today = pd.Timestamp.today().floor('d')
df.loc[df['Date'] > today, 'Date'] = today
print (df)
Date
0 2019-05-10
1 2019-06-06
2 2019-06-06
3 2019-06-06
最后使用相同格式的Series.dt.strftime
:
df['Date'] = df['Date'].dt.strftime('%d/%m/%Y')
print (df)
Date
0 10/05/2019
1 06/06/2019
2 06/06/2019
3 06/06/2019
另一种方法,其中仅将过滤后的行设置为日期时间的最终格式:
d = pd.to_datetime(df['Date'], format='%d/%m/%Y')
today = pd.Timestamp.today().floor('d').strftime('%d/%m/%Y')
df.loc[d > today, 'Date'] = today
print (df)
Date
0 10/05/2019
1 06/06/2019
2 06/06/2019
3 06/06/2019