Friday, August 31, 2018

timedelta64[D] is always coerced to timedelta64[ns]

I encountered the same problem when calculating timedelta in a dataframe. It even ended with an error when I tried to call the days attribute. I am using Numpy 1.6.1
AttributeError: 'Series' object has no attribute 'days'
Problem
df_trans['DELTA'] = df_trans['DATE2'] - df_trans['DATE1']
print df_trans['DELTA'].dtype
timedelta64[ns]
print df_trans['DELTA']
0 8 days, 00:00:00
1 15 days, 00:00:00
2 5 days, 00:00:00
df_trans['DELTA'] = df_trans['DELTA'].astype('timedelta64[D]')
print df_trans['DELTA'].dtype
Name: DELTA, dtype: timedelta64[D]
print df_trans['DELTA']
0 8 days, 00:00:00
1 15 days, 00:00:00
2 5 days, 00:00:00
Nothing changed at all
print df_trans['DELTA'].days
AttributeError: 'Series' object has no attribute 'days'
I get rid of the problem by putting it in to a list for the conversion.
            Ss_timedelta = df_trans['DATE2'] - df_trans['DATE1']
            ls_timedelta = Ss_timedelta.values.astype('timedelta64[D]').tolist()
            for i in range(0, len(ls_timedelta)):
                    ls_timedelta[i] = ls_timedelta[i].days / 1000                        
            df_trans['HOLDDAYS'] = pd.Series(ls_timedelta)
Full discussion at GitHub
https://github.com/pydata/xarray/issues/1143

No comments:

Post a Comment

Applying SMA10/20, SMA20/50 as trading signals

This is the comparison for results before and after applying SMA10/20 and SMA20/50 in the stock trader. Background Trading 3 stock ma...