with vender variable values unir una type tipo stw seguro rocket programacion monedas league igvault fortnite fifa dummy desde dato data convert columnas columna change cero categorical cambiar buscarv 2c2 python pandas series categorical-data

vender - python convert categorical variable to dummy



Pandas: convierte categorías a números (3)

Supongamos que tengo un marco de datos con países que dice:

cc | temp US | 37.0 CA | 12.0 US | 35.0 AU | 20.0

Sé que hay una función pd.get_dummies para convertir los países a ''codificaciones de una sola vez''. Sin embargo, deseo convertirlos a índices en su lugar de modo que obtenga cc_index = [1,2,1,3] lugar.

Supongo que hay una forma más rápida que usar get_dummies junto con una cláusula numpy where como se muestra a continuación:

[np.where(x) for x in df.cc.get_dummies().values]

Esto es algo más fácil de hacer en R usando ''factores'', así que espero que los pandas tengan algo similar.


Primero, cambie el tipo de columna:

df.cc = pd.Categorical(df.cc)

Ahora los datos se ven similares pero se almacenan categóricamente. Para capturar los códigos de categoría:

df[''code''] = df.cc.cat.codes

Ahora tu tienes:

cc temp code 0 US 37.0 2 1 CA 12.0 1 2 US 35.0 2 3 AU 20.0 0

Si no desea modificar su DataFrame, simplemente obtenga los códigos:

df.cc.astype(''category'').cat.codes

O use la columna categórica como índice:

df2 = pd.DataFrame(df.temp) df2.index = pd.CategoricalIndex(df.cc)


Si está utilizando la biblioteca sklearn , puede usar LabelEncoder . Al igual que pd.Categorical , las cadenas de entrada se ordenan alfabéticamente antes de la codificación.

from sklearn.preprocessing import LabelEncoder LE = LabelEncoder() df[''code''] = LE.fit_transform(df[''cc'']) print(df) cc temp code 0 US 37.0 2 1 CA 12.0 1 2 US 35.0 2 3 AU 20.0 0


Si solo desea transformar su serie en identificadores enteros, puede usar pd.factorize .

Tenga en cuenta que esta solución, a diferencia de pd.Categorical , no se ordenará alfabéticamente. Entonces, al primer país se le asignará 0 . Si desea comenzar desde 1 , puede agregar una constante:

df[''code''] = pd.factorize(df[''cc''])[0] + 1 print(df) cc temp code 0 US 37.0 1 1 CA 12.0 2 2 US 35.0 1 3 AU 20.0 3

Si desea ordenar alfabéticamente, especifique sort=True :

df[''code''] = pd.factorize(df[''cc''], sort=True)[0] + 1