Python Pandas - dados categóricos

Freqüentemente, em tempo real, os dados incluem as colunas de texto, que são repetitivas. Recursos como sexo, país e códigos são sempre repetitivos. Estes são os exemplos de dados categóricos.

Variáveis ​​categóricas podem assumir apenas um número limitado e geralmente fixo de valores possíveis. Além do comprimento fixo, os dados categóricos podem ter uma ordem, mas não podem realizar operações numéricas. Categóricos são um tipo de dados Pandas.

O tipo de dados categóricos é útil nos seguintes casos -

  • Uma variável de string que consiste em apenas alguns valores diferentes. A conversão de tal variável de string em uma variável categórica economizará um pouco de memória.

  • A ordem lexical de uma variável não é a mesma que a ordem lógica (“um”, “dois”, “três”). Ao converter para um categórico e especificar uma ordem nas categorias, a classificação e mín / máx usarão a ordem lógica em vez da ordem lexical.

  • Como um sinal para outras bibliotecas Python de que esta coluna deve ser tratada como uma variável categórica (por exemplo, para usar métodos estatísticos adequados ou tipos de gráfico).

Criação de Objetos

Objetos categóricos podem ser criados de várias maneiras. As diferentes formas foram descritas abaixo -

categoria

Especificando o dtipo como "categoria" na criação do objeto pandas.

import pandas as pd

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

Está output é o seguinte -

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

O número de elementos passados ​​para o objeto da série é quatro, mas as categorias são apenas três. Observe o mesmo nas categorias de saída.

pd.Categorical

Usando o construtor pandas Categorical padrão, podemos criar um objeto de categoria.

pandas.Categorical(values, categories, ordered)

Vamos dar um exemplo -

import pandas as pd

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

Está output é o seguinte -

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

Vamos dar outro exemplo -

import pandas as pd

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

Está output é o seguinte -

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

Aqui, o segundo argumento significa as categorias. Assim, qualquer valor que não esteja presente nas categorias será tratado comoNaN.

Agora, dê uma olhada no seguinte exemplo -

import pandas as pd

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

Está output é o seguinte -

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

Logicamente, o pedido significa que, a é melhor que b e b é melhor que c.

Descrição

Usando o .describe() comando nos dados categóricos, obtemos uma saída semelhante a um Series ou DataFrame do type corda.

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()

Está output é o seguinte -

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

Obtenha as propriedades da categoria

obj.cat.categories comando é usado para obter o 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

Está output é o seguinte -

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

obj.ordered comando é usado para obter a ordem do objeto.

import pandas as pd
import numpy as np

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

Está output é o seguinte -

False

A função retornou false porque não especificamos nenhum pedido.

Renomeando categorias

A renomeação das categorias é feita atribuindo-se novos valores ao series.cat.categoriespropriedade 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

Está output é o seguinte -

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

Categorias iniciais [a,b,c] são atualizados pelo s.cat.categories propriedade do objeto.

Anexando novas categorias

Usando o método Categorical.add.categories (), novas categorias podem ser anexadas.

import pandas as pd

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

Está output é o seguinte -

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

Removendo categorias

Usando o Categorical.remove_categories() método, categorias indesejadas podem ser removidas.

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")

Está output é o seguinte -

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]

Comparação de dados categóricos

Comparar dados categóricos com outros objetos é possível em três casos -

  • comparar igualdade (== e! =) a um objeto semelhante a uma lista (lista, série, matriz, ...) do mesmo comprimento que os dados categóricos.

  • todas as comparações (==,! =,>,> =, <e <=) de dados categóricos com outra série categórica, quando ordenadas == Verdadeiro e as categorias são as mesmas.

  • todas as comparações de dados categóricos com um escalar.

Dê uma olhada no seguinte exemplo -

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

Está output é o seguinte -

0  False
1  False
2  True
dtype: bool