Tipos de datos de Pandas

Tipos de datos de Pandas

  • Inteligencia artificial
6 min de lectura Actualizado Dec 16, 2020

Puntos clave: Los tipos de datos de Pandas son cruciales para una gestión eficiente de datos en Python, permitiendo un control preciso sobre la precisión numérica y el uso de la memoria. La guía explora varios tipos de datos de Pandas, incluyendo enteros, floats, fechas y datos categóricos.

  • Pandas optimiza el uso de memoria seleccionando los tipos de datos apropiados para los arrays numéricos.
  • Comprender los tipos de datos ayuda a evitar problemas de precisión y mejora el rendimiento.

El Python normal no tiene muchos tipos de datos. Solo tiene números de cadena, flotante, binario y complejo. No están ya ni cortos. No son números de 32 o 64 bits. Por suerte, en la mayoría de las situaciones, esto no importa. Solo importa cuando te requiere precisión absoluta o quieres utiliza la cantidad mínima de memoria para almacena un valor.

Esto importa cuando te son trabajar con arrays Pandas muy grandes, ya que Pandas, si te mal caso, están limitado por el tamaño de la memoria. Así que no te querría utiliza 64 bits cuando solo te necesito 8.

Precisión numérica en Python

El tamaño y la precisión son diferentes. Pero merece la pena mirar la precisión para entender algunas de las limitaciones de Python. La precisión significa el número de decimales.

Por ejemplo, 1/3 en formato decimal está la serie infinita 0.3333333333333333333... El ordenador no está infinito, así que en algún momento Python detiene la expansión decimal y redondea ese número.

Este comportamiento tiene algunas peculiaridades.

¿Cuándo es cero igual a cero?

Mira este código. Calcula la raíz cuadrada de 2 (o cualquier otro número) usando una técnica de hace 3.000 años. El algoritmo se desconecta cuando la diferencia entre dos números está 0.

    a=2
a1 = (a/2)+1
b1 = a/a1
aminus1 = a1
bminus1 = b1
while (aminus1-bminus1 != 0):
an = 0.5 * (aminus1 + bminus1)
bn = a / an
aminus1 = an
bminus1 = bn
print(an,bn,an-bn)

Produce:

    1.5 1.3333333333333333 0.16666666666666674
1.4166666666666665 1.411764705882353 0.004901960784313486
1.4142156862745097 1.41421143847487 4.2477996395895445e-06
1.4142135623746899 1.4142135623715002 3.1896707497480747e-12
1.414213562373095 1.4142135623730951 -2.220446049250313e-16

Pero te ve, justo arriba, que la diferencia nunca está 0. En cambio, el ordenador redondea, aparentemente en este caso, a 16 dígitos significativos. Tú puedes Ve esto: cuando llega a la respuesta 1.414213562373095, el código sigue ejecutándose. Esto se debe a que la diferencia entre los dos valores no converge a 0 a pesar de tomar la media aritmética de los dos valores.

Si te quieres entender cómo funciona este algoritmo, echa un vistazo a este clip:

play

  En caso te quieres un control preciso sobre el número de decimales, te puede utiliza la clase Decimal de la clase Python. Esto evita que ese código se ejecute en un bucle continuo.

    from decimal import *
getcontext().prec = 5
a=Decimal(2)
a1 = Decimal((a/2)+1)
b1 = Decimal(a/a1)
aminus1 = a1
bminus1 = b1
i=0
while (Decimal(aminus1-bminus1) != Decimal(0)):
an = Decimal(Decimal(0.5) * (aminus1 + bminus1))
bn = Decimal(a / an)
aminus1 = an
bminus1 = bn
i=i+1
print(i,an,bn,an-bn)

Se repite tres veces y se retira, quedándose en el valor de 1,4142 como raíz cuadrada de 2. Podríamos añadir más decimales para Obtén más precisión.

    1 1.5 1.3333 0.1667

2 1.4166 1.4118 0.0048

3 1.4142 1.4142 0.0000

Tipos de datos numéricos de NumPy & Pandas

NumPy va mucho más allá. Proporciona una interfaz de bajo nivel para tipos numéricos de tipo c. (En otras palabras, aquellos números que te podría declarar al escribir código en el lenguaje C). Aunque no los discutiremos aún aquí, también ofrece diferentes tipos de datos adecuados para:

  • Serie temporal
  • Intervalos
  • Fechas
  • Datos categóricos
  • Etcétera.

A continuación están la lista completa. A la izquierda está el nombre del objeto. A la derecha está el alias de la cadena.

Tipo de datos Alias
Int64Dtype, ... 'Int8', 'Int16', 'Int32', 'Int64', 'UInt8', 'UInt16', 'UInt32', 'UInt64'

 

IntervalDtype

'intervalo', 'intervalo', 'intervalo[<numpy_dtype>]', 'intervalo[datatiempo64[ns, <tz>]]', 'intervalo[timedelta64[<freq>]]'
DatetimeTZDtype 'fechatiempo64[ns, <tz>]'
CategoricalDtype 'categoría'
PeriodDtype 'period[<frecuencia>]', 'Period[<frecuencia>]'
SparseDtype 'Escaso', 'Escaso[int]', 'Escaso[flota]'
BooleanDtype 'booleano'
StringDtype 'cuerda'
Ninguna de las anteriores 'objeto'

Enteros y flotadores

Aquí, por ejemplo, tenemos una fecha, un float, un booleano y un entero. Podemos dejar que Pandas elija una escala para cada tipo numérico. O podemos darla explícitamente. Si no te lo das explícitamente, Pandas elige uno o usa el objeto genérico.

    import pandas as pd
import datetime
df= pd.DataFrame({
"a": datetime.datetime(2020,12,14),
"b": 1.000003,
"c": True,
"d": 3
}, index=[1,2,3,4])

Pregunta a Pandas por los tipos de datos:

    df.dtypes

Tú ves que elige 64 bits para almacenar 1.000003 y 3. Solo te necesitan 2 bits para almacenar el número 3, pero no está opción para números de 2 bits. Así que utilizaríamos int8 y utiliza 8 bits, si el espacio fuera un problema.

    a    datetime64[ns]
b           float64
c              bool
d             int64
dtype: object

Ahora, Haz una serie Pandas de 4 enteros y coacciona a un número de 8 bits.

    s=pd.Series([10,20,30,40],index=[1,2,3,4]).astype('int8')

Utiliza dtypes para mostrar los tipos de datos:

    s.dtypes

Resultados en:

    dtype('int8')

La cadena 'int8' están un alias. te también puede asignar el dtype usando la representación de objeto Pandas de ese pd. Int64Dtype.

    t = pd.Int64Dtype
pd.Series([1,2,3,4], dtype=t)

Estas publicaciones son mías y no representan necesariamente la posición, estrategias u opinión de BMC.

Más de Inteligencia artificial

¿Te interesa saber más de BMC?

El Brief están nuestro correo mensual sobre el mainframe y la orquestación empresarial: investigación, historias de clientes, noticias de productos, eventos.

Al registrarse para esta oferta te son confirmar que te leído y aceptado la Política de Privacidad de BMC.

Tú te has suscrito a The Brief

El Brief abarca la orquestación de mainframe y empresa—BMC AMI y Control-M—y la investigación de analistas, despliegues de clientes y eventos en ambas áreas.