python pandas dataframe categorical-data

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 .