I have two csv files with two different format which are '%m/%d/%Y %H:%M:%S'
and '%d/%m/%Y %H:%M:%S'
. Hence, I will get such ValueError :
ValueError: time data '14/12/2020 17:43:15' does not match format '%m/%d/%Y %H:%M:%S'
Sample data from file1.csv
where month is in the middle:
timestamp 15/12/2020 11:01:54 15/12/2020 11:02:54 15/12/2020 13:33:24
While file2.csv
, month is at front :
timestamp 12/15/2020 11:01:54 12/15/2020 11:02:54 12/15/2020 13:33:24
The column comes as String then I require to transform to only extract out the date
.
This is the code :
responses_df['date_only'] = [datetime.strptime(val, format='%m/%d/%Y %H:%M:%S').date() for val in responses_df['timestamp']]
My plan is to redirect format=
to a function that will overcome ValueError
and change the format from '%m/%d/%Y %H:%M:%S'
to '%d/%m/%Y %H:%M:%S'
.
Something like this.. :
responses_df['date_only'] = [datetime.strptime(val, format=get_format()).date() for val in responses_df['timestamp']] def get_format(): if ValueError is raised, use '%d/%m/%Y %H:%M:%S' else, use '%m/%d/%Y %H:%M:%S'
Advertisement
Answer
Try with
s1 = pd.to_datetime(df['timestamp'],format='%m/%d/%Y %H:%M:%S', errors='coerce') s2 = pd.to_datetime(df['timestamp'],format='%d/%m/%Y %H:%M:%S', errors='coerce')
Then
df['new']=s1.fillna(s2)