6135105654
6135105654

Reputation: 252

Trying to convert object to DateTime, getting TypeError

I have two dataframes (see here), which contain dates and times. The details for the first data frame are:

Date         object
Time         object
Channel1    float64
Channel2    float64
Channel3    float64
Channel4    float64
Channel5    float64
dtype: object

The details for the second data frame are:

Date     object
Time     object
Mean    float64
STD     float64
Min     float64
Max     float64
dtype: object

I am trying to convert the times to a DateTime object so that I can then do a calculation to make the time relative to the first time instance (i.e. the earliest time would become 0, and then all others would be seconds after the start).

When I try (from here):

df['Time'] = df['Time'].apply(pd.Timestamp)

I get this error:

TypeError: Cannot convert input [15:35:45] of type <class 'datetime.time'> to Timestamp

When I try (from here):

df['Time'] = pd.to_datetime(df['Time'])

but it gives me this error:

TypeError: <class 'datetime.time'> is not convertible to datetime

Any suggestions would be appreciated.

Upvotes: 2

Views: 13215

Answers (2)

6135105654
6135105654

Reputation: 252

In the end my solution was different for the two dataframes which I had.

For the first dataframe, the solution which combines the Date column with the Time column worked well:

df['Date Time'] = df['Date'] + ' ' + df['Time']   

After the two columns are combined, the following code is used to turn it into a datetime object (note the format='%d/%m/%Y %H:%M:%S' part is required because otherwise it confuses the month/date and uses the US formatting, i.e. it thinks 11/12/2018 is 12th of November, and not 11th of December):

df['Date Time'] = pd.to_datetime(df['Date Time'], format='%d/%m/%Y %H:%M:%S')

For my second dataframe, I went up earlier in my data processing journey and found an option which saves the date and month to a single column directly. After which the following code converted it to a datetime object:

df['Date Time'] = df['Date Time'].apply(pd.Timestamp)

Upvotes: 0

billydh
billydh

Reputation: 1035

the reason why you are getting the error

TypeError: <class 'datetime.time'> is not convertible to datetime

is literally what it says, your df['Time'] contains datetime.time object and so, cannot be converted to a datetime.datetime or Timestamp object, both of which require the date component to be passed as well.

The solution is to combine df['Date'] and df['Time'] and then, pass it to pd.to_datetime. See below code sample:

df = pd.DataFrame({'Date': ['3/11/2000', '3/12/2000', '3/13/2000'],
               'Time': ['15:35:45', '18:35:45', '05:35:45']})

df['datetime'] = pd.to_datetime(df['Date'] + ' ' + df['Time'])

Output

        Date      Time            datetime
0  3/11/2000  15:35:45 2000-03-11 15:35:45
1  3/12/2000  18:35:45 2000-03-12 18:35:45
2  3/13/2000  05:35:45 2000-03-13 05:35:45

Upvotes: 3

Related Questions