Python Pandas - Datos categóricos

A menudo, en tiempo real, los datos incluyen las columnas de texto, que son repetitivas. Las características como el género, el país y los códigos siempre son repetitivas. Estos son los ejemplos de datos categóricos.

Las variables categóricas pueden tomar solo un número limitado y generalmente fijo de valores posibles. Además de la longitud fija, los datos categóricos pueden tener un orden pero no pueden realizar operaciones numéricas. Los categóricos son un tipo de datos de Pandas.

El tipo de datos categóricos es útil en los siguientes casos:

  • Una variable de cadena que consta de solo unos pocos valores diferentes. Convertir una variable de cadena de este tipo en una variable categórica ahorrará algo de memoria.

  • El orden léxico de una variable no es el mismo que el orden lógico ("uno", "dos", "tres"). Al convertir a categórico y especificar un orden en las categorías, la clasificación y el mínimo / máximo utilizarán el orden lógico en lugar del léxico.

  • Como señal a otras bibliotecas de Python de que esta columna debe tratarse como una variable categórica (por ejemplo, para utilizar métodos estadísticos adecuados o tipos de gráficos).

Creación de objetos

El objeto categórico se puede crear de varias formas. Las diferentes formas se describen a continuación:

categoría

Especificando el dtype como "categoría" en la creación de objetos pandas.

import pandas as pd

s = pd.Series(["a","b","c","a"], dtype="category")
print s

Sus output es como sigue -

0  a
1  b
2  c
3  a
dtype: category
Categories (3, object): [a, b, c]

El número de elementos que se pasan al objeto de serie es cuatro, pero las categorías son solo tres. Observe lo mismo en las Categorías de salida.

pd.Categorical

Usando el constructor categórico estándar de pandas, podemos crear un objeto de categoría.

pandas.Categorical(values, categories, ordered)

Tomemos un ejemplo:

import pandas as pd

cat = pd.Categorical(['a', 'b', 'c', 'a', 'b', 'c'])
print cat

Sus output es como sigue -

[a, b, c, a, b, c]
Categories (3, object): [a, b, c]

Tengamos otro ejemplo:

import pandas as pd

cat = cat=pd.Categorical(['a','b','c','a','b','c','d'], ['c', 'b', 'a'])
print cat

Sus output es como sigue -

[a, b, c, a, b, c, NaN]
Categories (3, object): [c, b, a]

Aquí, el segundo argumento significa las categorías. Por lo tanto, cualquier valor que no esté presente en las categorías se tratará comoNaN.

Ahora, eche un vistazo al siguiente ejemplo:

import pandas as pd

cat = cat=pd.Categorical(['a','b','c','a','b','c','d'], ['c', 'b', 'a'],ordered=True)
print cat

Sus output es como sigue -

[a, b, c, a, b, c, NaN]
Categories (3, object): [c < b < a]

Lógicamente, el orden significa que, a es mayor que b y b es mayor que c.

Descripción

Utilizando el .describe() comando en los datos categóricos, obtenemos un resultado similar a un Series o DataFrame del type cuerda.

import pandas as pd
import numpy as np

cat = pd.Categorical(["a", "c", "c", np.nan], categories=["b", "a", "c"])
df = pd.DataFrame({"cat":cat, "s":["a", "c", "c", np.nan]})

print df.describe()
print df["cat"].describe()

Sus output es como sigue -

cat s
count    3 3
unique   2 2
top      c c
freq     2 2
count     3
unique    2
top       c
freq      2
Name: cat, dtype: object

Obtenga las propiedades de la categoría

obj.cat.categories El comando se usa para obtener el categories of the object.

import pandas as pd
import numpy as np

s = pd.Categorical(["a", "c", "c", np.nan], categories=["b", "a", "c"])
print s.categories

Sus output es como sigue -

Index([u'b', u'a', u'c'], dtype='object')

obj.ordered El comando se usa para obtener el orden del objeto.

import pandas as pd
import numpy as np

cat = pd.Categorical(["a", "c", "c", np.nan], categories=["b", "a", "c"])
print cat.ordered

Sus output es como sigue -

False

La función regresó false porque no hemos especificado ningún pedido.

Cambio de nombre de categorías

El cambio de nombre de las categorías se realiza asignando nuevos valores al series.cat.categoriesPropiedad series.cat.categories.

import pandas as pd

s = pd.Series(["a","b","c","a"], dtype="category")
s.cat.categories = ["Group %s" % g for g in s.cat.categories]
print s.cat.categories

Sus output es como sigue -

Index([u'Group a', u'Group b', u'Group c'], dtype='object')

Categorías iniciales [a,b,c] son actualizados por el s.cat.categories propiedad del objeto.

Agregar nuevas categorías

Usando el método Categorical.add.categories (), se pueden agregar nuevas categorías.

import pandas as pd

s = pd.Series(["a","b","c","a"], dtype="category")
s = s.cat.add_categories([4])
print s.cat.categories

Sus output es como sigue -

Index([u'a', u'b', u'c', 4], dtype='object')

Eliminar categorías

Utilizando el Categorical.remove_categories() método, las categorías no deseadas se pueden eliminar.

import pandas as pd

s = pd.Series(["a","b","c","a"], dtype="category")
print ("Original object:")
print s

print ("After removal:")
print s.cat.remove_categories("a")

Sus output es como sigue -

Original object:
0  a
1  b
2  c
3  a
dtype: category
Categories (3, object): [a, b, c]

After removal:
0  NaN
1  b
2  c
3  NaN
dtype: category
Categories (2, object): [b, c]

Comparación de datos categóricos

La comparación de datos categóricos con otros objetos es posible en tres casos:

  • comparar la igualdad (== y! =) con un objeto similar a una lista (lista, Serie, matriz, ...) de la misma longitud que los datos categóricos.

  • todas las comparaciones (==,! =,>,> =, <y <=) de datos categóricos con otra Serie categórica, cuando se ordenan == Verdadero y las categorías son las mismas.

  • todas las comparaciones de datos categóricos con un escalar.

Eche un vistazo al siguiente ejemplo:

import pandas as pd

cat = pd.Series([1,2,3]).astype("category", categories=[1,2,3], ordered=True)
cat1 = pd.Series([2,2,2]).astype("category", categories=[1,2,3], ordered=True)

print cat>cat1

Sus output es como sigue -

0  False
1  False
2  True
dtype: bool