pynoob
pynoob

Reputation: 41

Date object and time integer to datetime

All, I have a dataframe with a date column and an hour column. I am trying to combine those into a single timestamp. I tried many solutions available using datetime.datetime.combine and just implicitly extracting month day and year and creating a datetime stamp with it but all lead to some error.

    idOnController  date        eventTime           Energy  hour
0   5014            2018-05-31  2018-05-31 01:00:00 26.619  0
2   5014            2018-06-02  2018-06-02 02:00:00 29.251  0
3   5014            2018-06-03  2018-06-03 03:00:00 30.635  0

The datatypes are as follows

idOnController             int64
date                      object
eventTime         datetime64[ns]
Energy                   float64
hour                       int64
dtype: object

I am looking to combine date and hour into a timestamp that looks like eventTime and then replace eventTime with that value.

Upvotes: 0

Views: 304

Answers (2)

Partha Mandal
Partha Mandal

Reputation: 1441

Another way of doing this would be (a bit more verbose though!):

df['date'] = pd.to_datetime(df['date'])
df['year'] = df.date.dt.year
df['month'] = df.date.dt.month
df['day'] = df.date.dt.day

df['date'] = pd.to_datetime(df[['year','month','day','hour']])

Upvotes: 1

Quang Hoang
Quang Hoang

Reputation: 150785

You can do:

df['new_date'] = pd.to_datetime(df['date']) + df['hour'] * pd.to_timedelta('1H')

Output of df.dtypes:

idOnController             int64
date                      object
eventTime         datetime64[ns]
Energy                   float64
hour                       int64
new_date          datetime64[ns]
dtype: object

If you want to have the string timestamps you can do

df['new_date'] = df['new_date'].dt.strftime('%Y-%m-%d %H:%M:%S')

Upvotes: 2

Related Questions