Подтвердить что ты не робот

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

Я создал TimeSeries в pandas:

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 for Data Analysis".

В следующем абзаце автор проверяет тип индекса:

In [353]: ts.index.dtype

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

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

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

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

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

4b9b3361

Ответ 1

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

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

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

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


По-видимому, представление типа datetime64 изменилось с момента написания книги, чтобы показать конечность dtype.

Ответ 2

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