web-dev-qa-db-fra.com

Différence entre le type de données 'datetime64 [ns]' et '<M8 [ns]'?

J'ai créé un TimeSeries dans 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

Je suis l'exemple de l'ouvrage "Python for Data Analysis". 

Dans le paragraphe suivant, l'auteur vérifie le type d'index:

In [353]: ts.index.dtype

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

Lorsque je fais exactement la même opération dans la console, je reçois:

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

Quelle est la différence entre deux types 'datetime64[ns]' et '<M8[ns]'?

Et pourquoi ai-je un type différent?

37
LLaP

datetime64[ns] est un type général, alors que <M8[ns] est un type spécifique. Les types généraux se mappent à des types spécifiques, mais peuvent être différents d’une installation de NumPy à l’autre.

Sur une machine dont l'ordre des octets est peu important, il n'y a pas de différence entre np.dtype('datetime64[ns]') et np.dtype('<M8[ns]'):

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

Cependant, sur une machine Big Endian, np.dtype('datetime64[ns]') serait égal à np.dtype('>M8[ns]').

Donc, datetime64[ns] correspond à <M8[ns] ou >M8[ns] en fonction de l’endurance de la machine.

Il existe de nombreux autres exemples similaires de types de types généraux mappés sur des types spécifiques: int64 correspond à <i8 ou >i8 et int correspond à int32 ou int64


Apparemment, la représentation du type de données datetime64 a changé depuis le moment où le livre a été écrit pour montrer l’endurance du type de données.

61
unutbu

Si cela génère des erreurs lors de l'exécution de votre code, la mise à niveau de pandas et numpy de manière synchrone est susceptible de résoudre le conflit dans le type de données datetime.

0
jnPy