2015-03-23 13 views
27

Ich habe ein Timeseries in Pandas erstellt:Unterschied zwischen Datentyp 'datetime64 [ns]' und '<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 

ich am Beispiel von bin nach 'Python for Data Analysis' Buch.

Im folgenden Abschnitt überprüft der Autor den Indextyp:

In [353]: ts.index.dtype 

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

Wenn ich die gleiche Operation in der Konsole genau bekomme ich:

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

Was ist der Unterschied zwischen zwei Arten 'datetime64[ns]' und '<M8[ns]'?

Und warum bekomme ich einen anderen Typ?

+0

Ich kann die Frage nicht beantworten, aber bedenke, dass das Buch ungefähr 3 Jahre alt ist (und daher auf einer älteren Version von Pandas basiert), also ist es ziemlich üblich, einige Unterschiede zu finden (besonders wahr für Index und Datetime) Sachen), obwohl die meisten Beispiele immer noch mehr oder weniger gleich funktionieren. – JohnE

Antwort

35

datetime64[ns] ist ein allgemeiner dtype, während <M8[ns] ein bestimmter dtype ist. Allgemeine dtypes werden bestimmten dtypes zugeordnet, können sich aber von einer Installation von NumPy zum nächsten unterscheiden.

Auf einer Maschine, deren Byte-Reihenfolge ist Little-Endian, gibt es keinen Unterschied zwischen np.dtype('datetime64[ns]') und np.dtype('<M8[ns]'):

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

jedoch auf einer Big-Endian-Maschine, würde np.dtype('datetime64[ns]')np.dtype('>M8[ns]') gleich.

Also datetime64[ns] Karten entweder <M8[ns] oder >M8[ns] abhängig von der Endian-Ness der Maschine.

Es gibt viele andere ähnliche Beispiele der allgemeinen dtypes Zuordnung zu bestimmten dtypes: int64 Karten <i8 oder >i8 und int Karten entweder int32 oder int64 abhängig von der Bit-Architektur des Betriebssystems und wie NumPy kompiliert wurde.


Offenbar ist die repr der datetime64 dtype hat seit der Zeit ändert das Buch geschrieben wurde die Bytereihenfolge des dtype zu zeigen.

1

Wenn dies beim Ausführen Ihres Codes zu Fehlern führt, löst das gleichzeitige Aktualisieren von Pandas und numpy wahrscheinlich den Konflikt im Datetime-Datentyp.

Verwandte Themen