Convert string to only time python

I have the following Pandas dataframe in Python 2.7.

import pandas as pd
trial_num = [1,2,3,4,5]
sail_rem_time = ['11:33:11','16:29:05','09:37:56','21:43:31','17:42:06']
dfc = pd.DataFrame[zip[*[trial_num,sail_rem_time]],columns=['Temp_Reading','Time_of_Sail']]
print dfc

The dataframe looks like this:

  Temp_Reading Time_of_Sail
             1     11:33:11
             2     16:29:05
             3     09:37:56
             4     21:43:31
             5     17:42:06

This dataframe comes from a *.csv file. I use Pandas to read in the *.csv file as a Pandas dataframe. When I use print dfc.dtypes, it shows me that the column Time_of_Sail has a datatype object. I would like to convert this column to datetime datatype BUT I only want the time part - I don't want the year, month, date.

I can try this:

dfc['Time_of_Sail'] = pd.to_datetime[dfc['Time_of_Sail']]
dfc['Time_of_Sail'] = [time.time[] for time in dfc['Time_of_Sail']]

but the problem is that the when I run print dfc.dtypes it still shows that the column Time_of_Sail is object.

Is there a way to convert this column into a datetime format that only has the time?

Additional Information:

To create the above dataframe and output, this also works:

import pandas as pd
trial_num = [1,2,3,4,5]
sail_rem_time = ['11:33:11','16:29:05','09:37:56','21:43:31','17:42:06']
data = [
    [trial_num[0],sail_rem_time[0]],
    [trial_num[1],sail_rem_time[1]],[trial_num[2],sail_rem_time[2]],
    [trial_num[3],sail_rem_time[3]]
    ]
dfc = pd.DataFrame[data,columns=['Temp_Reading','Time_of_Sail']]
dfc['Time_of_Sail'] = pd.to_datetime[dfc['Time_of_Sail']]
dfc['Time_of_Sail'] = [time.time[] for time in dfc['Time_of_Sail']]
print dfc
print dfc.dtypes

We can convert a string to datetime using strptime[] function. This function is available in datetime and time modules to parse a string to datetime and time objects respectively.

Python strptime[]

Python strptime[] is a class method in datetime class. Its syntax is:

datetime.strptime[date_string, format]

Both the arguments are mandatory and should be string. This function is exactly opposite of strftime[] function, which converts datetime object to a string. We have the similar function available in time module too, where its syntax is:

time.strptime[time_string[, format]]

Here the function returns struct_time object. If format string is not provided, it defaults to “%a %b %d %H:%M:%S %Y” which matches the formatting returned by ctime[] function. If the input string cannot be parsed according to the provided format, then ValueError is raised. The exception message provides clear details about the issue in parsing.

Python strptime[] format directives

Following table contains most of the commonly used format directives.

DirectiveDescriptionExample Output
%a Weekday as locale’s abbreviated name. Sun, Mon, …, Sat [en_US] So, Mo, …, Sa [de_DE]
%A Weekday as locale’s full name. Sunday, Monday, …, Saturday [en_US] Sonntag, Montag, …, Samstag [de_DE]
%w Weekday as a decimal number, where 0 is Sunday and 6 is Saturday. 0, 1, 2, 3, 4, 5, 6
%d Day of the month as a zero-padded decimal number. 01, 02, …, 31
%b Month as locale’s abbreviated name. Jan, Feb, …, Dec [en_US] Jan, Feb, …, Dez [de_DE]
%B Month as locale’s full name. January, February, …, December [en_US] Januar, Februar, …, Dezember [de_DE]
%m Month as a zero-padded decimal number. 01, 02 … 12
%y Year without century as a zero-padded decimal number. 01, 02, … 99
%Y Year with century as a decimal number. 0001, 0002, … , 9999
%H Hour [24-hour clock] as a zero-padded decimal number. 01, 02, … , 23
%I Hour [12-hour clock] as a zero-padded decimal number. 01, 02, … , 12
%p Locale’s equivalent of either AM or PM. AM, PM [en_US] am, pm [de_DE]
%M Minute as a zero-padded decimal number. 01, 02, … , 59
%S Second as a zero-padded decimal number. 01, 02, … , 59
%f Microsecond as a decimal number, zero-padded on the left. 000000, 000001, …, 999999 Not applicable with time module.
%z UTC offset in the form ±HHMM[SS] [empty string if the object is naive]. [empty], +0000, -0400, +1030
%Z Time zone name [empty string if the object is naive]. [empty], UTC, IST, CST
%j Day of the year as a zero-padded decimal number. 001, 002, …, 366
%U Week number of the year [Sunday as the first day of the week] as a zero padded decimal number. All days in a new year preceding the first Sunday are considered to be in week 0. 00, 01, …, 53
%W Week number of the year [Monday as the first day of the week] as a decimal number. All days in a new year preceding the first Monday are considered to be in week 0. 00, 01, …, 53
%c Locale’s appropriate date and time representation. Tue Aug 16 21:30:00 1988 [en_US] Di 16 Aug 21:30:00 1988 [de_DE]
%x Locale’s appropriate date representation. 08/16/88 [None] 08/16/1988 [en_US] 16.08.1988 [de_DE]
%X Locale’s appropriate time representation. 21:30:00 [en_US] 21:30:00 [de_DE]
%% A literal ‘%’ character. %

Python strptime[] examples

Let’s look into some specific examples of strptime[] function to convert string to datetime and time objects.

String to datetime

from datetime import datetime

datetime_str = '09/19/18 13:55:26'

datetime_object = datetime.strptime[datetime_str, '%m/%d/%y %H:%M:%S']

print[type[datetime_object]]
print[datetime_object]  # printed in default format

Output:


2018-09-19 13:55:26

String to date object

We can use date[] function alongwith strptime[] function to convert string to date object.

date_str = '09-19-2018'

date_object = datetime.strptime[date_str, '%m-%d-%Y'].date[]
print[type[date_object]]
print[date_object]  # printed in default formatting

Output:


2018-09-19

String to time object

We can use time[] function alongwith strptime[] function to convert string to time object.

time_str = '13::55::26'
time_object = datetime.strptime[time_str, '%H::%M::%S'].time[]
print[type[time_object]]
print[time_object]

Output:


13:55:26

Python time strptime[] example

Let’s see some examples of using time module strptime[] function.

import time

time_obj = time.strptime[time_str, '%H::%M::%S']
print[type[time_obj]]
print[time_obj]

# default formatting - "%a %b %d %H:%M:%S %Y"
print[time.strptime['Wed Sep 19 14:55:02 2018']]

Output:


time.struct_time[tm_year=1900, tm_mon=1, tm_mday=1, tm_hour=13, tm_min=55, tm_sec=26, tm_wday=0, tm_yday=1, tm_isdst=-1]
time.struct_time[tm_year=2018, tm_mon=9, tm_mday=19, tm_hour=14, tm_min=55, tm_sec=2, tm_wday=2, tm_yday=262, tm_isdst=-1]

Python strptime[] ValueError Example

We can use try-except block to catch parsing exception and perform corrective actions.

datetime_str = '09/19/18 13:55:26'

try:
    datetime_object = datetime.strptime[datetime_str, '%m/%d/%y']
except ValueError as ve:
    print['ValueError Raised:', ve]

time_str = '99::55::26'

try:
    time_object = time.strptime[time_str, '%H::%M::%S']
except ValueError as e:
    print['ValueError:', e]

Output:

ValueError Raised: unconverted data remains:  13:55:26
ValueError: time data '99::55::26' does not match format '%H::%M::%S'

Notice that the ValueError message clearly explains the root cause of the parsing exception.

Python Convert String to Datetime with locale

Let’s look at an example where a locale-specific string will be converted to datetime object. We will use locale module to set the locale to be used by python.

import locale

locale.setlocale[locale.LC_ALL, 'de_DE']
date_str_de_DE = '10-Dezember-2018 Montag'  # de_DE locale
datetime_object = datetime.strptime[date_str_de_DE, '%d-%B-%Y %A']
print[datetime_object]

Output: 2018-12-10 00:00:00

You can checkout complete python script and more Python examples from our GitHub Repository.

References: datetime strptime[], time strptime[]

How do you convert a string to just time in Python?

Use strptime[] function of a time module Use this step if you want to convert a string to a time object. Use the time. strptime[string[, format]] function. This function converts time in string format to a time object in time.

How do you convert string to UTC time in Python?

Python convert a string to datetime with timezone In this example, I have imported a module called timezone. datetime. now[timezone['UTC']] is used to get the present time with timezone. The format is assigned as time = “%Y-%m-%d %H:%M:%S%Z%z”.

How do you convert a date without time in Python?

date. isoformat[] Return a string representing the date in ISO 8601 format, 'YYYY-MM-DD'. For example, date[2002, 12, 4]. isoformat[] == '2002-12-04'.

How do I convert a string to a date?

Using strptime[] , date and time in string format can be converted to datetime type. The first parameter is the string and the second is the date time format specifier. One advantage of converting to date format is one can select the month or date or time individually.

Chủ Đề