Search code examples
pythonpandasdatetimefinancial

how to convert object type to datetime64[ns] in python jupyter?


I have a column of object type like this:

 quote['SellTime'].head()


 Out[32]:
  0    94520
  1    94538
  2    94609
  3    94615    
  4    94617
  Name: SellTime, dtype: object

I want to convert it to to date time (datetime64[ns]) format.

I have done the following code:

 quote['SellTime'].astype(str).astype(int)
 t2 = quote['SellTime'].astype(str).str.zfill(6)
 quote['SellTime'] = pd.to_datetime(t2, format='%H%M%S').dt.time

But it is still object type:

 quote['SellTime'].head()

 0    09:45:20
 1    09:45:38
 2    09:46:09
 3    09:46:15
 4    09:46:17
 Name: SellTime, dtype: object

Solution

  • You need dates too if need datetimes:

    quote['SellTime'] = pd.to_datetime(t2, format='%H%M%S')
    print (quote)
                 SellTime
    0 1900-01-01 09:45:20
    1 1900-01-01 09:45:38
    2 1900-01-01 09:46:09
    3 1900-01-01 09:46:15
    4 1900-01-01 09:46:17
    

    Or better is convert times to timedeltas:

    quote['SellTime']=pd.to_timedelta(pd.to_datetime(t2,format='%H%M%S').dt.strftime('%H:%M:%S'))
    print (quote['SellTime'])
    0   09:45:20
    1   09:45:38
    2   09:46:09
    3   09:46:15
    4   09:46:17
    Name: SellTime, dtype: timedelta64[ns]
    

    Because if convert datetimes to times:

    quote['SellTime'] = pd.to_datetime(t2, format='%H%M%S').dt.time
    
    print (quote['SellTime'].dtype)
    object
    
    print (quote['SellTime'])
    0    09:45:20
    1    09:45:38
    2    09:46:09
    3    09:46:15
    4    09:46:17
    Name: SellTime, dtype: object
    
    print (quote['SellTime'].apply(type))
    0    <class 'datetime.time'>
    1    <class 'datetime.time'>
    2    <class 'datetime.time'>
    3    <class 'datetime.time'>
    4    <class 'datetime.time'>
    Name: SellTime, dtype: object