Skip to content Skip to sidebar Skip to footer

Convert Integer Series To Timedelta In Pandas

I have a data frame in pandas which includes number of days since an event occurred. I want to create a new column that calculates the date of the event by subtracting the number

Solution 1:

First, to convert the column with integers to a timedelta, you can use to_timedelta:

In[60]: pd.to_timedelta(df['days_since_event'], unit='D')
Out[60]:
05days17days23days36days40daysName: days_since_event, dtype: timedelta64[ns]

Then you can create a new column with the current date and substract those timedelta's:

In [62]: df['event_date'] = pd.Timestamp('2015-12-29')

In [63]: df['event_date'] = df['event_date'] -  pd.to_timedelta(df['days_since_event'], unit='D')

In [64]: df['event_date']
Out[64]:
0   2015-12-24
1   2015-12-22
2   2015-12-26
3   2015-12-23
4   2015-12-29
dtype: datetime64[ns]

Solution 2:

Just to follow up with joris' response, you can convert an int or a float into whatever time unit you want with pd.to_timedelta(x, unit=''), changing only the entry for unit=:

# Years, Months, Days:
pd.to_timedelta(3.5, unit='Y') # returns '1095 days 17:27:36'
pd.to_timedelta(3.5, unit='M') # returns '91 days 07:27:18'
pd.to_timedelta(3.5, unit='D') # returns '3 days 12:00:00'

# Hours, Minutes, Seconds:
pd.to_timedelta(3.5, unit='h') # returns '0 days 03:30:00'
pd.to_timedelta(3.5, unit='m') # returns '0 days 00:03:30'
pd.to_timedelta(3.5, unit='s') # returns '0 days 00:00:03.50'

Note that mathematical operations are legal once correctly formatted:

pd.to_timedelta(3.5, unit='h') - pd.to_timedelta(3.25, unit='h') # returns'0 days 00:15:00'

Post a Comment for "Convert Integer Series To Timedelta In Pandas"