2014-12-01 2 views
1

У меня есть два столбца формата даты и времени (Timestamp) в моей DataFrame, df['start'], df['end']. Я хотел бы получить продолжительность между двумя датами. Поэтому я создаю столбец продолжительностьtimedelta64 и преобразование даты и времени

df['duration'] = df['start'] - df['end'] 

Однако теперь duration столбец отформатирован в numpy.timedelta64, а datetime.timedelta как я бы ожидать.

>>> df['duration'][0] 
>>> numpy.timedelta64(0,'ns') 

Хотя

>>> df['start'][0] - df['end'][0] 
>>> datetime.timedelta(0) 

Может кто-нибудь объяснить мне, почему вычитание массива изменить timedelta тип? Есть ли способ, которым я поддерживаю datetime.timedelta, с которым легче работать?

+0

возможно дубликат [Преобразование между DateTime, Timestamp и datetime64] (http://stackoverflow.com/questions/13703720/converting-between-datetime-timestamp-and-datetime64) – philshem

+0

Хотя этот вопрос, несомненно, будет быть полезным, это не ** дубликат. – Ffisegydd

ответ

2

Это была одна из мотивов для реализации скаляра Timedelta в pandas 0.15.0. Смотрите полную документацию here

В> = 0.15.0 реализация timedelta64[ns] серии по-прежнему np.timedelta64[ns] под капотом, но все полностью скрыта от пользователя в datetime.timedelta суб-классифицироваться скаляр Timedelta (что в принципе полезно надмножество timedelta и версия numpy).

In [1]: df = DataFrame([[pd.Timestamp('20130102'),pd.Timestamp('20130101')]],columns=list('AB')) 

In [2]: df['diff'] = df['A']-df['B'] 

In [3]: df.dtypes 
Out[3]: 
A  datetime64[ns] 
B  datetime64[ns] 
diff timedelta64[ns] 
dtype: object 

# this will return a Timedelta in 0.15.2 
In [4]: df['A'][0]-df['B'][0] 
Out[4]: datetime.timedelta(1) 

In [5]: (df['A']-df['B'])[0] 
Out[5]: Timedelta('1 days 00:00:00') 
+0

Спасибо! Это очень полезно. Просто вопрос, как я могу обновить модуль pandas? –

Смежные вопросы