Estoy tratando de reemplazar los valores en una columna de un marco de datos. La columna ('femenino') solo contiene los valores 'femenino' y 'masculino'.
He probado lo siguiente:
w['female']['female']='1'
w['female']['male']='0'
Pero reciba exactamente la misma copia de los resultados anteriores.
Idealmente, me gustaría obtener algo de salida que se asemeje al siguiente elemento de bucle.
if w['female'] =='female':
w['female'] = '1';
else:
w['female'] = '0';
He revisado la documentación de gotchas ( http://pandas.pydata.org/pandas-docs/stable/gotchas.html ) pero no puedo entender por qué no sucede nada.
Cualquier ayuda será apreciada.

.locsintaxis para evitarSettingWithCopyWarning: pandas.pydata.org/pandas-docs/stable/…Puede editar un subconjunto de un marco de datos utilizando loc:
En este caso:
fuente
Ver pandas.DataFrame.replace () docs .
fuente
Ligera variación:
fuente
Esto también debería funcionar:
fuente
También se puede usar
applycon.getiew['female'] = w['female'].apply({'male':0, 'female':1}.get):Marco de datos
w:Utilizando
applypara reemplazar valores del diccionario:Resultado:
Nota:
applycon el diccionario se debe usar si todos los valores posibles de las columnas en el marco de datos están definidos en el diccionario, de lo contrario, tendrá vacío para los que no están definidos en el diccionario.fuente
Esto es muy compacto:
Otra buena:
fuente
Alternativamente, existe la función incorporada pd.get_dummies para este tipo de tareas:
Esto le proporciona un marco de datos con dos columnas, una para cada valor que aparece en w ['hembra'], de las cuales suelta el primero (porque puede inferirlo de la que queda). La nueva columna se nombra automáticamente como la cadena que reemplazó.
Esto es especialmente útil si tiene variables categóricas con más de dos valores posibles. Esta función crea tantas variables ficticias necesarias para distinguir entre todos los casos. Tenga cuidado de no asignar todo el marco de datos a una sola columna, sino que si w ['mujer'] podría ser 'hombre', 'mujer' o 'neutral', haga algo como esto:
Luego te quedan dos columnas nuevas que te dan la codificación ficticia de 'hembra' y te deshaces de la columna con las cadenas.
fuente
Usando
Series.mapconSeries.fillnaSi su columna contiene más cadenas que solo
femaleymale,Series.mapfallará en este caso ya que regresaráNaNpara otros valores.Es por eso que tenemos que encadenarlo con
fillna:Ejemplo por qué
.mapfalla :Para el método correcto , encadenamos
mapconfillna, por lo que rellenamosNaNcon los valores de la columna original:fuente
También hay una función
pandasllamadafactorizeque puede usar para realizar automáticamente este tipo de trabajo. Convierte las etiquetas a los números:['male', 'female', 'male'] -> [0, 1, 0]. Vea esta respuesta para más información.fuente
Creo que en respuesta debería señalarse qué tipo de objeto obtiene en todos los métodos sugeridos anteriormente: ¿es Serie o Marco de datos?
Cuando obtenga una columna por
w.female.ow[[2]](donde, supongamos, 2 es el número de su columna), obtendrá DataFrame. Entonces, en este caso, puede usar métodos DataFrame como.replace.Cuando usa
.locoilocrecupera Series, y Series no tienen.replacemétodo, por lo que debe usar métodos comoapply,mapetc.fuente