2015-03-23 2 views
27

Я создал TimeSeries в панд:Разница между типом данных 'datetime64 [ns]' и '<M8 [ns]'?

In [346]: from datetime import datetime 

In [347]: dates = [datetime(2011, 1, 2), datetime(2011, 1, 5), datetime(2011, 1, 7), 

.....: datetime(2011, 1, 8), datetime(2011, 1, 10), datetime(2011, 1, 12)] 

In [348]: ts = Series(np.random.randn(6), index=dates) 

In [349]: ts 

Out[349]: 

2011-01-02 0.690002 

2011-01-05 1.001543 

2011-01-07 -0.503087 

2011-01-08 -0.622274 

2011-01-10 -0.921169 

2011-01-12 -0.726213 

Я следую на примере из «Python для анализа данных» книги.

В следующем параграфе, автор проверяет тип индекса:

In [353]: ts.index.dtype 

Out[353]: dtype('datetime64[ns]') 

Когда я точно такую ​​же операцию в консоли я получаю:

ts.index.dtype 
dtype('<M8[ns]') 

В чем разница между двумя типами 'datetime64[ns]' и '<M8[ns]'?

И почему я получаю другой тип?

+0

Я не могу ответить на вопрос, но имейте в виду, что книга составляет около 3 лет (и, следовательно, основана на более старой версии панд), поэтому довольно часто можно найти некоторые отличия, подобные этому (особенно верно для индекса и даты), хотя большинство примеров все еще работают более или менее одинаково. – JohnE

ответ

35

datetime64[ns] является общим типом, в то время как <M8[ns] является конкретным типом. Общие типы dtypes сопоставляются с определенными типами данных, но могут отличаться от одной установки NumPy к следующей.

На машине, чей порядок байтов мало младшему, нет никакой разницы между np.dtype('datetime64[ns]') и np.dtype('<M8[ns]'):

In [6]: np.dtype('datetime64[ns]') == np.dtype('<M8[ns]') 
Out[6]: True 

Однако на большой Endian машине, np.dtype('datetime64[ns]') будет равна np.dtype('>M8[ns]').

So datetime64[ns] карты либо <M8[ns], либо >M8[ns] в зависимости от конечности машины.

Есть много других подобных примеров общего отображения dtypes конкретной dtypes: int64 карты к <i8 или >i8 и int карты в любом int32 или int64 в зависимости от разрядной архитектуры ОС и как NumPy был составлен.


Видимо, магнезии в datetime64 DTYPE изменилось с того времени, книга была написана, чтобы показать порядка байтов в DTYPE.

1

Если это вызывает ошибки при запуске вашего кода, синхронно обновлять pandas и numpy, вероятно, разрешит конфликт в datetime datatype.

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