web-dev-qa-db-fra.com

Quels sont tous les types que pandas reconnaît)?

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?

41
uday

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.

14
Alexander

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 à pandasastype 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:

dtypes

28
lcameron05