python - Factoriza una columna de cadenas en pandas
dataframe categorical-data (1)
Como dice la pregunta, tengo un marco de datos
df_original
que es bastante grande pero se ve así:
ID Count Column 2 Column 3 Column 4
RowX 1 234. 255. yes. 452
RowY 1 123. 135. no. 342
RowW 1 234. 235. yes. 645
RowJ 1 123. 115. no. 342
RowA 1 234. 285. yes. 233
RowR 1 123. 165. no. 342
RowX 2 234. 255. yes. 234
RowY 2 123. 135. yes. 342
RowW 2 234. 235. yes. 233
RowJ 2 123. 115. yes. 342
RowA 2 234. 285. yes. 312
RowR 2 123. 165. no. 342
.
.
.
RowX 1233 234. 255. yes. 133
RowY 1233 123. 135. no. 342
RowW 1233 234. 235. no. 253
RowJ 1233 123. 115. yes. 342
RowA 1233 234. 285. yes. 645
RowR 1233 123. 165. no. 342
Estoy tratando de deshacerme de los datos de texto y reemplazarlos con un equivalente numérico predefinido.
Por ejemplo, en este caso, me gustaría reemplazar los
Column3
yes
o
no
Column3
con
1
o
0
respectivamente.
¿Hay alguna manera de hacer esto sin que tenga que entrar manualmente y modificar los valores?
v
RowX yes
RowY no
RowW yes
RowJ no
RowA yes
RowR no
RowX yes
RowY yes
RowW yes
RowJ yes
RowA yes
RowR no
Name: Column 3, dtype: object
pd.factorize
1 - pd.factorize(v)[0]
array([1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0])
np.where
np.where(v == ''yes'', 1, 0)
array([1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0])
pd.Categorical
/
astype(''category'')
pd.Categorical(v).codes
array([1, 0, 1, 0, 1, 0, 1, 1, 1, 1, 1, 0], dtype=int8)
v.astype(''category'').cat.codes
RowX 1
RowY 0
RowW 1
RowJ 0
RowA 1
RowR 0
RowX 1
RowY 1
RowW 1
RowJ 1
RowA 1
RowR 0
dtype: int8
pd.Series.replace
v.replace({''yes'' : 1, ''no'' : 0})
RowX 1
RowY 0
RowW 1
RowJ 0
RowA 1
RowR 0
RowX 1
RowY 1
RowW 1
RowJ 1
RowA 1
RowR 0
Name: Column 3, dtype: int64
Una versión divertida y generalizada de lo anterior:
v.replace({r''^(?!yes).*$'' : 0}, regex=True).astype(bool).astype(int)
RowX 1
RowY 0
RowW 1
RowJ 0
RowA 1
RowR 0
RowX 1
RowY 1
RowW 1
RowJ 1
RowA 1
RowR 0
Name: Column 3, dtype: int64
Cualquier cosa que no sea
"yes"
es
0
.