Este escrito ha sido evaluado por nuestros especialistas para que tengas la seguridad de la exactitud de nuestro contenido.
Solución:
Primero, cambie el tipo de la 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 sino simplemente obtener 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 solo desea transformar su serie en identificadores enteros, puede usar pd.factorize
.
Tenga en cuenta esta solución, a diferencia de pd.Categorical
, no se ordenará alfabéticamente. Así que el primer país será asignado 0
. Si desea empezar 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
Si está utilizando el sklearn
biblioteca que puedes usar LabelEncoder
. Me gusta pd.Categorical
las cadenas de entrada se ordenan alfabéticamente antes de codificarlas.
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
valoraciones y comentarios
Eres capaz de defender nuestra investigación fijando un comentario y valorándolo te lo agradecemos.