English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

Datos categorizados de Pandas

Ejemplo de operación de datos de clasificación de Pandas

Los datos generalmente contienen columnas de texto repetitivo en tiempo real. Sexo, país/Las funciones como la región y el código siempre son repetitivas. Estos son ejemplos de datos de clasificación.
分类变量只能采用有限的且通常是固定数量的可能值。除了固定长度外,分类数据可能还具有顺序,但不能执行数字运算。分类是Pandas数据类型。

分类数据类型在以下情况下很有用

一个仅包含几个不同值的字符串变量。将这样的字符串变量转换为分类变量将节省一些内存。

变量的词汇顺序与逻辑顺序(“一个”,“两个”,“三个”)不同。通过转换为类别并在类别上指定顺序,排序和最小/最大将使用逻辑顺序而不是词汇顺序。

作为其他Python库的信号,此列应视为分类变量(例如,使用适当的统计方法或绘图类型)。

对象创建

分类对象可以通过多种方式创建。下面描述了不同的方式:

类别

通过在熊猫对象创建中将dtype指定为“ category”。

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

Resultados de ejecución a continuación:

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

传递给series对象的元素数为4,但是类别仅为3。在输出类别中观察相同。

pd.Categorical

使用标准的熊猫分类构造器,我们可以创建一个类别对象。

pandas.Categorical(values, categories, ordered)

我们看一个实例-

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

Resultados de ejecución a continuación:

 [a, b, c, a, b, c]
 Categorías (3, object): [a, b, c]

让我们再看一个实例

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

Resultados de ejecución a continuación:

 [a, b, c, a, b, c, NaN]
 Categorías (3, object): [c, b, a]

在这里,第二个参数表示类别。因此,类别中不存在的任何值都将被视为NaN。
现在,看看以下示例:

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

Resultados de ejecución a continuación:

 [a, b, c, a, b, c, NaN]
 Categorías (3, object): [c < b < a]

从逻辑上讲,这个顺序意味着a大于b且b大于c。

描述

使用.describe()的命令来分类数据,我们得到相似的输出到一个系列或数据框的类型字符串。

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

Resultados de ejecución a continuación:

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

Obtener propiedades de categorías

El comando obj.cat.categories se utiliza para obtener las categorías del objeto.

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

Resultados de ejecución a continuación:

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

El comando obj.ordered se utiliza para obtener la secuencia 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)

Resultados de ejecución a continuación:

   False

La función devuelve false porque no se especificó ningún orden.

Cambio de nombre de categorías

El cambio de nombre de las categorías se realiza asignando un nuevo valor a la propiedad 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)

Resultados de ejecución a continuación:

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

La categoría inicial [a, b, c] se actualiza mediante la propiedad s.cat.categories del objeto.

Agregar nuevas categorías

Utilizando el método Categorical.add_categories() se puede 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)

Resultados de ejecución a continuación:

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

Eliminar categorías

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

 import pandas as pd
 s = pd.Series(["a","b","c","a"], dtype="category")
 print(("Original object:"))
 print(s)
 print(("Después de la eliminación:"))
 print(s.cat.remove_categories("a"))

Resultados de ejecución a continuación:

 Objeto original:
 0 a
 1 b
 2 c
 3 a
 dtype: category
 Categorías (3, object): [a, b, c]
 Después de la eliminación:
 0 NaN
 1 b
 2 c
 3 NaN
 dtype: category
 Categorías (2, object): [b, c]

Comparación de datos categorizados

Se pueden comparar datos categorizados con otros objetos en tres casos:

Se comparan igual (== y !=) con objetos de lista similar a una lista (lista, serie, array, ...) de longitud igual a los datos categorizados.

Cuando el orden== True y las categorías son iguales, se comparan los datos categorizados con todos los datos de otra serie categorizada (==,!=,>,> =,  < y <=)。< div>    

Comparaciones de datos categorizados con escalares.

Vea el 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)

Resultados de ejecución a continuación:

 0  False
 1  False
 2  True
 dtype: bool