I have a data frame column in mmmyy format and would like to change in yyyy-mm-dd format.
Input :
JavaScript
x
4
1
Date
2
Aug21
3
Sept21
4
Output:
JavaScript
1
4
1
Date
2
2021-08-01
3
2021-09-01
4
tried: conv = lambda x: datetime.strptime(x, "%b %y")
JavaScript
1
2
1
dfi["Date"] = dfi["Date"].apply(conv)
2
Advertisement
Answer
Sept
doesn’t match the %b
format as only 3 letters are valid.
JavaScript
1
7
1
from datetime import datetime
2
datetime.strptime('Sept21', '%b%y')
3
# ValueError: time data 'Sept21' does not match format '%b%y'
4
5
datetime.strptime('Sep21', '%b%y')
6
# datetime.datetime(2021, 9, 1, 0, 0)
7
You could fix the string to keep only 3 letters:
JavaScript
1
3
1
pd.to_datetime(df['Date'].str.replace(r'(?<=...).*(?=..)', '', regex=True),
2
format='%b%y')
3
or .replace(r'(?<=...)D*', '', regex=True)
output:
JavaScript
1
4
1
0 2021-08-01
2
1 2021-09-01
3
Name: Date, dtype: datetime64[ns]
4