2015-03-23 11 views
27

Stworzyłem timeseries w pand:Różnica między typem danych "datetime64 [ns]" i "<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 

Obserwuję na przykład z „Pythona do analizy danych” książki.

W następnym akapicie autor sprawdza typ indeksu:

In [353]: ts.index.dtype 

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

Kiedy zrobić dokładnie taką samą operację w konsoli uzyskać:

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

Jaka jest różnica między dwoma rodzajami 'datetime64[ns]' i '<M8[ns]'?

I dlaczego otrzymuję inny typ?

+0

Nie mogę odpowiedzieć na to pytanie, ale pamiętaj, że książka ma około 3 lat (a więc opiera się na starszej wersji pandy), więc dość często można znaleźć pewne różnice (szczególnie w przypadku indeksu i daty i godziny) rzeczy), chociaż większość przykładów nadal działa mniej więcej tak samo. – JohnE

Odpowiedz

35

datetime64[ns] to ogólny typ dtype, a <M8[ns] jest specyficznym typem. Ogólne dtypes są mapowane do określonych dtypów, ale mogą się różnić od jednej instalacji NumPy do następnej.

Na komputerze, który jest kolejność bajtów little endian, nie ma różnicy między np.dtype('datetime64[ns]') i np.dtype('<M8[ns]'):

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

jednak na wielkiej maszynie endian, np.dtype('datetime64[ns]') wyniesie np.dtype('>M8[ns]').

Więc datetime64[ns] mapuje do <M8[ns] lub >M8[ns] w zależności od końcówki maszyny.

Istnieje wiele innych podobnych przykładów ogólnej dtypes mapowania do konkretnych dtypes: int64 mapy do <i8 lub >i8 i int mapy do obu int32 lub int64 zależności od architektury bitowego systemu operacyjnego i jak NumPy został skompilowany.


Najwyraźniej repr z dtype datetime64 ma zmian od czasu książka została napisana, aby pokazać endian-ness z dtype.

1

Jeśli powoduje to błędy w uruchomieniu kodu, uaktualnienie pand i numpy synchronicznie prawdopodobnie rozwiąże konflikt w typach datetime.

Powiązane problemy