2015-03-23 11 views
27

Ho creato un TimeSeries in panda:Differenza tra tipo di dati "datetime64 [ns]" e "<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 

Sto seguendo l'esempio da 'Python per l'analisi dei dati' libro.

Nel paragrafo seguente, l'autore controlla il tipo di indice:

In [353]: ts.index.dtype 

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

Quando faccio esattamente la stessa operazione nella console ottengo:

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

Qual è la differenza tra i due tipi 'datetime64[ns]' e '<M8[ns]'?

E perché ottengo un tipo diverso?

+0

Non riesco a rispondere alla domanda, ma tengo a mente che il libro ha circa 3 anni (e quindi si basa su una versione precedente di panda) quindi è piuttosto comune trovare alcune differenze come questa (specialmente vero per indice e datetime roba), anche se molti esempi funzionano ancora più o meno lo stesso. – JohnE

risposta

35

datetime64[ns] è un dtype generale, mentre <M8[ns] è un dtype specifico. I dtypes generali si associano a tipi specifici, ma possono essere diversi da un'installazione di NumPy a quella successiva.

Su una macchina il cui ordine di byte è poco endian, non c'è differenza tra np.dtype('datetime64[ns]') e np.dtype('<M8[ns]'):

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

Tuttavia, su una grande macchina endian, np.dtype('datetime64[ns]') sarebbe uguale np.dtype('>M8[ns]').

Quindi datetime64[ns] mappe a <M8[ns] o >M8[ns] a seconda della endianità della macchina.

ci sono molti altri esempi simili di dtypes generale di mappatura a dtypes specifici: int64 Maps per <i8 o >i8 e int mappe per entrambi int32 o int64 seconda dell'architettura bit del sistema operativo e di come NumPy è stato compilato.


A quanto pare, il repr del DTYPE datetime64 è cambiata dal tempo il libro è stato scritto per mostrare l'endian-ness del DTYPE.

1

Se questo genera errori nell'esecuzione del codice, è possibile che l'aggiornamento di panda e numpy in modo sincrono risolva il conflitto nel tipo di dati datetime.

Problemi correlati