Pour les pandas, est-ce que quelqu'un sait, s'il existe un type de données autre que
(je) float64
, int64
_ (et autres variantes de np.number
comme float32
, int8
etc.)
(ii) bool
(iii) datetime64
, timedelta64
telles que les colonnes de chaîne, ont toujours un dtype
de object
?
Alternativement, je veux savoir, s'il y a des types de données autres que (i), (ii) et (iii) dans la liste ci-dessus que pandas
ne fait pas de c'est dtype
un object
?
Il y a aussi uint8.
Les Pandas docs sur dtypes ont beaucoup plus d’informations.
Les principaux types stockés dans les objets pandas) sont float, int, bool, datetime64 [ns], timedelta [ns] et object. En outre, ces types de données ont des tailles d’élément, par exemple int64 et int32.
Par défaut, les types entiers sont int64 et les types float, float64, indépendamment de la plate-forme (32 ou 64 bits). Ce qui suit aura tous comme résultat int64 dtypes.
Numpy, cependant, choisira des types dépendants de la plate-forme lors de la création de tableaux. Le résultat suivant résultera en int32 sur une plate-forme 32 bits.
pandas
emprunte ses types de données à numpy
. Pour une démonstration de ceci, voir ce qui suit:
import pandas as pd
df = pd.DataFrame({'A': [1,'C',2.]})
df['A'].dtype
>>> dtype('O')
type(df['A'].dtype)
>>> numpy.dtype
Vous pouvez trouver la liste des numpy.dtypes
Valides dans la documentation :
'?' booléen
'b' octet (signé)
"B" octet non signé
'i' entier (signé)
'u' entier non signé
'f' virgule flottante
'c' complexe-virgule flottante
'm' timedelta
'M' datetime
Objets 'O' (Python)
'S', 'a' octets à terminaison zéro (non recommandé)
Chaîne Unicode 'U'
Données brutes 'V' (void)
pandas
devrait supporter ces types. Utiliser la méthode astype
d'un objet pandas.Series
Avec l'une des options ci-dessus, car l'argument d'entrée entraînera pandas
à essayer de convertir le Series
à ce type. (ou à tout le moins retomber sur object
type); 'u'
Est le seul que je vois pandas
ne comprenant pas du tout:
df['A'].astype('u')
>>> TypeError: data type "u" not understood
Ceci est une erreur numpy
qui résulte du fait que le 'u'
Doit être suivi d'un nombre spécifiant le nombre d'octets par élément dans (qui doit être valide):
import numpy as np
np.dtype('u')
>>> TypeError: data type "u" not understood
np.dtype('u1')
>>> dtype('uint8')
np.dtype('u2')
>>> dtype('uint16')
np.dtype('u4')
>>> dtype('uint32')
np.dtype('u8')
>>> dtype('uint64')
# testing another invalid argument
np.dtype('u3')
>>> TypeError: data type "u3" not understood
Pour résumer, les méthodes astype
de pandas
essaieront de faire quelque chose de sensé avec n'importe quel argument valable pour numpy.dtype
. Notez que numpy.dtype('f')
est identique à numpy.dtype('float32')
et numpy.dtype('f8')
est identique à numpy.dtype('float64')
etc. Il en va de même pour la transmission des arguments à pandas
astype
méthodes.
Pour localiser les classes de types de données respectives dans NumPy, la documentation Pandas recommande ceci:
def subdtypes(dtype):
subs = dtype.__subclasses__()
if not subs:
return dtype
return [dtype, [subdtypes(dt) for dt in subs]]
subdtypes(np.generic)
Sortie:
[numpy.generic,
[[numpy.number,
[[numpy.integer,
[[numpy.signedinteger,
[numpy.int8,
numpy.int16,
numpy.int32,
numpy.int64,
numpy.int64,
numpy.timedelta64]],
[numpy.unsignedinteger,
[numpy.uint8,
numpy.uint16,
numpy.uint32,
numpy.uint64,
numpy.uint64]]]],
[numpy.inexact,
[[numpy.floating,
[numpy.float16, numpy.float32, numpy.float64, numpy.float128]],
[numpy.complexfloating,
[numpy.complex64, numpy.complex128, numpy.complex256]]]]]],
[numpy.flexible,
[[numpy.character, [numpy.bytes_, numpy.str_]],
[numpy.void, [numpy.record]]]],
numpy.bool_,
numpy.datetime64,
numpy.object_]]
Les pandas acceptent ces classes en tant que types valides. Par exemple, dtype={'A': np.float}
.
Les documents NumPy contiennent plus de détails et un graphique: