Python change a date format in dataframe - python

I have a dataset containing a column "date":
date item
20.3.2010 17:08 a
20.3.2010 11:16 b
2010-03-20 15:55:14.060 c
2010-03-21 13:56:45.077 d
I would like to convert all values that have format as 20.3.2010 17:08 into 2010-03-21 13:56:45.077.
Does anybody have an idea?
Thank you.

Check on below:
from datetime import datetime
INPUT_FORMAT = '%d.%m.%Y %H:%M'
OUTPUT_FORMAT = '%Y-%m-%d %H:%M:%S.%f'
datetime.strptime('20.3.2010 17:08',INPUT_FORMAT).strftime(OUTPUT_FORMAT)
#Output '2010-03-20 17:08:00.000000'
You could find more information in offcial strptime and strftime.
To do a 100% match with 3 digits microseconds you could use this SO approach.

df['date'] = pd.to_datetime(df['date'], , format = '%Y-%m-%d %H:%M:%S.%f')
You can find more information on pd.to_datetime() here, and the format string type can be found here.

Related

Convert timestemp in pandas dataframe to a special format

I have a pandas dataframe df_data_raw that has a column with the name "timestemp". This column has timestemp information in the format "2022-05-01 00:15:00+00:00" for every 15 minutes. I would like to convert this time information into the following format "01.05.2022 00:15". Can you tell me how to do this?
You can use
df['timestamp'] = pd.to_datetime(df['timestamp']).dt.strftime('%d.%m.%Y %H:%M')
s = '2022-05-01 00:15:00+00:00'
print(pd.to_datetime(s).strftime('%d.%m.%Y %H:%M'))
01.05.2022 00:15
Use str.strftime with the '%d.%m.%Y %H:%M' format:
df_data_raw['timestemp'] = (pd.to_datetime(df_data_raw['timestemp'])
.dt.strftime('%d.%m.%Y %H:%M')
)
Use datetime
import datetime
timestamp = "2022-05-01 00:15:00+00:00"
dt_obj = datetime.datetime.strptime(timestamp, "%Y-%m-%d %H:%M:%S+00:00")
dt_string = dt_obj.strftime("%d.%m.%Y %H:%M:%S")
print(dt_string)
Output
01.05.2022 00:15:00
You can use pd.to_datetime with the appropriate format argument.
pd.to_datetime(df_data_raw['timestemp'], format='%d.%m.%Y %H:%M')

Finding the right format for pd.to_datetime

I'm trying to convert strings in my dataset('2016-01-01 00:00:00') to time stamps using pd.to_datetime.
Im trying:
pd.to_datetime(train["timestamp"],format='%Y/%m/%d %I:%M:%S')
but I get
time data '2016-01-01 00:00:00' does not match format '%Y/%m/%d %I:%M:%S' (match)
How can I fix this?
If you want it to be in the specific format that you mentioned, that is %Y/%m/%d %I:%M:%S, then do it like this.
First convert your string to datetime format using to_datetime:
df['timestamp'] = pd.to_datetime(df['timestamp'])
Now that your column is in datetime format, convert to the following format using strftime:
df['timestamp'] = df['timestamp'].dt.strftime('%Y/%m/%d %I:%M:%S')
Output:
timestamp
0 2016/01/01 12:00:00
1 2016/01/01 12:00:00
As others pointed out, use %H instead of %I for 24 hour format, like this:
df['timestamp'] = df['timestamp'].dt.strftime('%Y/%m/%d %H:%M:%S')
That's because your format in your df is different. Try the following using -, also use %H for 24-hour clock:
pd.to_datetime(train["timestamp"],format='%Y-%m-%d %H:%M:%S')
2 issues here:
Use - instead of /
%I is for Hour 00-12, use %H for Hour 00-23
pd.to_datetime(train["timestamp"],format='%Y-%m-%d %H:%M:%S')

format 01-01-16 7:43 string to datetime

I have the following strings that I'd like to convert to datetime objects:
'01-01-16 7:43'
'01-01-16 3:24'
However, when I try to use strptime it always results in a does not match format error.
Pandas to_datetime function nicely handles the automatic conversion, but I'd like to solve it with the datetime library as well.
format_ = '%m-%d-%Y %H:%M'
my_date = datetime.strptime("01-01-16 4:51", format_)
ValueError: time data '01-01-16 4:51' does not match format '%m-%d-%Y %H:%M'
as i see your date time string '01-01-16 7:43'
its a 2-digit year not 4-digit year
that in order to parse through a 2-digit year, e.g. '16' rather than '2016', a %y is required instead of a %Y.
you can do that like this
from datetime import datetime
datetime_str = '01-01-16 7:43'
datetime_object = datetime.strptime(datetime_str, '%m-%d-%y %H:%M')
print(type(datetime_object))
print(datetime_object)
give you output 2016-01-01 07:43:00
First of all, if you want to match 2016 you should write %Y while for 16 you should write %y.
That means you should write:
format_ = '%m-%d-%y %H:%M'
Check this link for all format codes.

Cannot find the correct way to change string time to datetime

I have a df column with the following days example 2018-07-25 19:23:17.000000
and i cannot find the correct way to convert this string into a datetime value
I've been trying with the following code
dfa['time_event_utc'] = pd.to_datetime(df['time_event_utc'],format='%d%b%Y:%H:%M:%S +000000',utc=True)
your format is '%Y-%m-%d %H:%M:%S.%f'
mydt = '2018-07-25 19:23:17.000000'
datetime.datetime.strptime(mydt , '%Y-%m-%d %H:%M:%S.%f')

Converting string to date that contains 00:00:00

To convert a string date to date format dropping the '00:00:00' I use :
import datetime
strDate = '2017-04-17 00:00:00'
datetime.datetime.strptime(strDate, '%Y/%m/%d %H:%M:%S').strftime('%Y-%m-%d')
Returns :
ValueError: time data '2017-04-17 00:00:00' does not match format '%Y/%m/%d %H:%M:%S'
Is %H:%M:%S not correct format ?
This is the correct way:
datetime.datetime.strptime(strDate, '%Y-%m-%d %H:%M:%S').strftime('%Y-%m-%d')
Notice the - instead of / in strptime. The date is converted to: 2017-04-17.
If you would like to have it displayed a different way, have a look here.

Categories