it-swarm.com.de

So ändern Sie Werte in einem Datenframe-Python

Ich habe in den letzten 30 Minuten nach einer Antwort gesucht, aber die einzigen Lösungen sind entweder für eine einzelne Spalte oder in R. Ich habe einen Datensatz, in dem ich die ('Y/N') - Werte in 1 und 0 ändern möchte beziehungsweise. Ich fühle mich wie das Kopieren und Einfügen des Codes unter 17-mal ist sehr ineffizient. 

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

Meine Lösung ist die folgende. Dies verursacht keinen Fehler, aber die Werte im Datenrahmen ändern sich nicht. Ich gehe davon aus, dass ich so etwas wie df = df_new machen muss. Aber wie geht das? 

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

BEARBEITEN: Es gibt 17 Spalten in diesem Datensatz, aber es gibt noch einen anderen Datensatz, den ich hoffe zu lösen, der 56 Spalten enthält. 

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
5
handavidbang

Das sollte funktionieren:

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
2
Luis Miguel

Am einfachsten finde ich die Verwendung von replace von 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
5
jezrael

Dies sollte tun:

df.infants = df.infants.map({ 'Y' : 1, 'N' : 0})

1

Sie können die Werte mit der Map-Funktion ändern.

Ex.:

x = {'y': 1, 'n': 0}

for col in df.columns():
    df[col] = df[col].map(x)

Auf diese Weise ordnen Sie jede Spalte Ihres Datenrahmens zu.

1
forayer

Vielleicht können Sie sich bewerben,

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

roh

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

nach Gebrauch anwenden

   number     sex  sex_new
0       1    male        1
1       2  female        0
2       3  female        0
3       4  female        0
4       5    male        1
1
Dondon Jie

Alle oben genannten Lösungen sind korrekt, aber Sie können auch Folgendes tun:

df["infants"] = df["infants"].replace("Y", 1).replace("N", 0).replace("?", 1), das ich jetzt genauer lese, ist der Verwendung von replace with dict sehr ähnlich!

0
May Pilijay El