para - pandas python install
¿Cuáles son todos los tipos que los pandas reconocen? (2)
También está uint8.
Los documentos de Pandas en pandas.pydata.org/pandas-docs/stable/basics.html#dtypes tienen mucha más información.
Los principales tipos almacenados en los objetos de pandas son float, int, bool, datetime64 [ns], timedelta [ns] y object. Además, estos tipos de datos tienen tamaños de elementos, por ejemplo, int64 e int32.
Por defecto, los tipos enteros son int64 y los tipos flotantes son float64, SIN IMPORTAR la plataforma (32 bits o 64 bits). Todo lo siguiente resultará en dtypes int64.
Numpy, sin embargo, elegirá los tipos dependientes de la plataforma al crear matrices. Lo siguiente resultará en int32 en la plataforma de 32 bits.
Para pandas, ¿alguien lo sabría, si algún tipo de datos fuera de
(i) float64
, int64
(y otras variantes de np.number
como float32
, int8
etc.)
(ii) bool
(iii) datetime64
, timedelta64
como columnas de cadena, siempre tiene un dtype
de object
?
Alternativamente, quiero saber, si hay algún tipo de datos aparte de (i), (ii) y (iii) en la lista anterior, ¿qué pandas
no hace que su tipo dtype
un object
?
pandas
toman prestados sus tipos de numpy
. Para la demostración de esto ver lo siguiente:
import pandas as pd
df = pd.DataFrame({''A'': [1,''C'',2.]})
df[''A''].dtype
>>> dtype(''O'')
type(df[''A''].dtype)
>>> numpy.dtype
Puede encontrar la lista de numpy.dtypes
válidos en la documentación :
''?'' booleano
byte ''b'' (firmado)
''B'' byte sin firmar
''i'' entero (con signo)
''u'' entero sin signo
punto flotante ''f''
''c'' complejo-punto flotante
''m'' timedelta
Fecha y hora ''M''
Objetos ''O'' (Python)
''S'', ''a'' bytes terminados en cero (no recomendado)
''U'' Unicode string
''V'' datos en bruto (nulo)
pandas
deberían soportar estos tipos. El uso del método astype
de un objeto pandas.Series
con cualquiera de las opciones anteriores como argumento de entrada resultará en que los pandas
intenten convertir la Series
a ese tipo (o al menos volver al tipo de object
); ''u''
es el único que veo que los pandas
no comprenden en absoluto:
df[''A''].astype(''u'')
>>> TypeError: data type "u" not understood
Este es un error numpy
que se debe a que la ''u''
debe ir seguida de un número que especifique el número de bytes por elemento en (que debe ser válido):
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
Para resumir, los métodos astype
de los objetos pandas
intentarán hacer algo sensato con cualquier argumento que sea válido para numpy.dtype
. Tenga en cuenta que numpy.dtype(''f'')
es igual que numpy.dtype(''float32'')
y numpy.dtype(''f8'')
es igual que numpy.dtype(''float64'')
etc. Argumentos a los métodos astype
.
Para ubicar las respectivas clases de tipos de datos en NumPy, los documentos de Pandas recomiendan esto:
def subdtypes(dtype):
subs = dtype.__subclasses__()
if not subs:
return dtype
return [dtype, [subdtypes(dt) for dt in subs]]
subdtypes(np.generic)
Salida:
[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_]]
Pandas acepta estas clases como tipos válidos. Por ejemplo, dtype={''A'': np.float}
.
NumPy docs contain más detalles y una tabla: