Je suis confronté au même problème que celui soulevé dans How to trouble-shoot HDFStore Exception: cannot find the correct atom type.HDFStore Exception: impossible de trouver le type d'atome correct: un cas de base
Je le réduit à un exemple donné dans la documentation des pandas Storing Mixed Types in a Table.
Le point entier dans cet exemple est à append
un DataFrame
avec quelques valeurs manquantes à HDFStore
. Lorsque j'utilise l'exemple de code, je me retrouve avec un atom type error
.
df_mixed
Out[103]:
A B C bool datetime64 int string
0 -0.065617 -0.062644 -0.004758 True 2001-01-02 00:00:00 1 string
1 1.444643 1.664311 -0.189095 True 2001-01-02 00:00:00 1 string
2 0.569412 -0.077504 -0.125590 True 2001-01-02 00:00:00 1 string
3 NaN NaN 0.563939 True NaN 1 NaN
4 NaN NaN -0.618218 True NaN 1 NaN
5 NaN NaN 1.477307 True NaN 1 NaN
6 -0.287331 0.984108 -0.514628 True 2001-01-02 00:00:00 1 string
7 -0.244192 0.239775 0.861359 True 2001-01-02 00:00:00 1 string
store=HDFStore('df.h5')
store.append('df_mixed', df_mixed, min_itemsize={'values':50})
...
Exception: cannot find the correct atom type -> [dtype->object,items->Index([datetime64, string], dtype=object)] object of type 'Timestamp' has no len()
Si je dtype
pour les mettre en vigueur les types problématiques (en fait les object
ones) comme le suggère le poste lié (la réponse de Jeff), je reçois toujours la même erreur. Qu'est-ce que j'oublie ici?
dtypes = [('datetime64', '|S20'), ('string', '|S20')]
store=HDFStore('df.h5')
store.append('df_mixed', df_mixed, dtype=dtypes, min_itemsize={'values':50})
...
Exception: cannot find the correct atom type -> [dtype->object,items->Index([datetime64, string], dtype=object)] object of type 'Timestamp' has no len()
Merci pour avoir un aperçu
RESOUDRE
j'utilisais pandas
0,10 et 0,11 sont passés à -dev. Comme Jeff a déduit, le problème était avec NaN vs NaT.
L'ancienne version pandas géants produit
df_mixed.ix[3:5,['A', 'B', 'string', 'datetime64']] = np.nan such that
2 0.569412 -0.077504 -0.125590 True 2001-01-02 00:00:00 1 string
3 NaN NaN 0.563939 True NaN 1 NaN
tandis que la seconde la version
2 0.569412 -0.077504 -0.125590 True 2001-01-02 00:00:00 1 string
3 NaN NaN 0.563939 True NaT 1 NaN
vous aviez raison avec la mise à niveau 0-11 pour obtenir le droit NaT. J'ai édité mon post en conséquence. Merci – user17375