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?
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.
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.