He buscado una respuesta para los últimos 30 minutos, pero que las únicas soluciones son para una sola columna o en R. tengo un conjunto de datos en el que quiero cambiar la (‘S/N’) valores 1 y 0, respectivamente. Me siento como copiar y pegar el código de abajo 17 veces es muy ineficiente.

df.loc[df.infants == 'n', 'infants'] = 0
df.loc[df.infants == 'y', 'infants'] = 1
df.loc[df.infants == '?', 'infants'] = 1

Mi solución es la siguiente. Esto no causa un error, pero los valores en el dataframe no cambia. Estoy asumiendo que necesito hacer algo como df = df_new. Pero, ¿cómo hacer esto?

for coln in df:
for value in coln: 
        if value == 'y':
            value = '1'
        elif value == 'n':
            value = '0'
        else: 
            value = '1'

EDIT: Hay 17 columnas en este conjunto de datos, pero hay otro conjunto de datos que estoy esperando para abordar el cual contiene 56 columnas.

republican  n   y   n.1 y.1 y.2 y.3 n.2 n.3 n.4 y.4 ?   y.5 y.6 y.7 n.5 y.8
0   republican  n   y   n   y   y   y   n   n   n   n   n   y   y   y   n   ?
1   democrat    ?   y   y   ?   y   y   n   n   n   n   y   n   y   y   n   n
2   democrat    n   y   y   n   ?   y   n   n   n   n   y   n   y   n   n   y
3   democrat    y   y   y   n   y   y   n   n   n   n   y   ?   y   y   y   y
4   democrat    n   y   y   n   y   y   n   n   n   n   n   n   y   y   y   y
  • cuántas columnas quieres a cambio? Puedes mostrar df.cabeza (a) ?
  • Hay 17 columnas en este conjunto de datos, pero hay otra con 56.
InformationsquelleAutor handavidbang | 2017-07-13

6 Comentarios

  1. 8

    Esto debería funcionar:

    for col in df.columns():
       df.loc[df[col] == 'n', col] = 0
       df.loc[df[col] == 'y', col] = 1
       df.loc[df[col] == '?', col] = 1
    • Gracias a este trabajo!
    • Gracias @handavidbang
  2. 10

    Creo que la simplicidad es el uso reemplace por dict:

    np.random.seed(100)
    df = pd.DataFrame(np.random.choice(['n','y','?'], size=(5,5)), 
                                       columns=list('ABCDE'))
    print (df)
       A  B  C  D  E
    0  n  n  n  ?  ?
    1  n  ?  y  ?  ?
    2  ?  ?  y  n  n
    3  n  n  ?  n  y
    4  y  ?  ?  n  n
    
    d = {'n':0,'y':1,'?':1}
    df = df.replace(d)
    print (df)
       A  B  C  D  E
    0  0  0  0  1  1
    1  0  1  1  1  1
    2  1  1  1  0  0
    3  0  0  1  0  1
    4  1  1  1  0  0
  3. 2

    Tal vez usted puede tratar de aplicar,

    import pandas as pd
    # create dataframe
    number = [1,2,3,4,5]
    sex = ['male','female','female','female','male']
    df_new = pd.DataFrame()
    df_new['number'] = number
    df_new['sex'] = sex
    df_new.head()
    # create def for category to number 0/1
    def tran_cat_to_num(df):
        if df['sex'] == 'male':
            return 1
        elif df['sex'] == 'female':
            return 0
    # create sex_new 
    df_new['sex_new']=df_new.apply(tran_cat_to_num,axis=1)
    df_new

    raw

       number     sex
    0       1    male
    1       2  female
    2       3  female
    3       4  female
    4       5    male

    después de su uso se aplican

       number     sex  sex_new
    0       1    male        1
    1       2  female        0
    2       3  female        0
    3       4  female        0
    4       5    male        1
  4. 1

    Puede cambiar los valores en el función de mapa de.

    Ex.:

    x = {'y': 1, 'n': 0}
    
    for col in df.columns():
        df[col] = df[col].map(x)

    De esta manera asignar a cada columna de la dataframe.

    • Tengo que hacer eso para cada columna? El conjunto de datos con la que estoy trabajando ahora solo tiene 17 columnas, pero veo que esto de ser molesto para mi proyecto final el cual cuenta con 56 columnas.
    • gracias! No funcionó, pero creo que es porque mi dataset cambiado antes de hacer sus sugerencias. Yo lo tengo funcionando ahora!
  5. 0

    Todas las soluciones anteriores son correctas, pero lo que también podría hacer es:

    df["infants"] = df["infants"].replace("Y", 1).replace("N", 0).replace("?", 1)
    que ahora que he leído más detenidamente es muy similar a la utilización de reemplazar con dict !

Dejar respuesta

Please enter your comment!
Please enter your name here