J'ai cherché une réponse au cours des 30 dernières minutes, mais les seules solutions sont soit pour une seule colonne, soit en R. J'ai un jeu de données dans lequel je veux changer les valeurs ('Y/N') en 1 et 0 respectivement. J'ai l'impression que copier et coller le code ci-dessous 17 fois est très inefficace.
df.loc[df.infants == 'n', 'infants'] = 0
df.loc[df.infants == 'y', 'infants'] = 1
df.loc[df.infants == '?', 'infants'] = 1
Ma solution est la suivante. Cela ne provoque pas d'erreur, mais les valeurs du cadre de données ne changent pas. Je suppose que je dois faire quelque chose comme df = df_new. Mais comment faire ça?
for coln in df:
for value in coln:
if value == 'y':
value = '1'
Elif value == 'n':
value = '0'
else:
value = '1'
EDIT: Il y a 17 colonnes dans cet ensemble de données, mais il y a un autre ensemble de données que j'espère aborder qui contient 56 colonnes.
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
Cela devrait fonctionner:
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
Je pense que le plus simple est d’utiliser replace
by 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
Vous pouvez modifier les valeurs à l’aide de la fonction map .
Ex.:
x = {'y': 1, 'n': 0}
for col in df.columns():
df[col] = df[col].map(x)
De cette façon, vous mappez chaque colonne de votre dataframe.
Peut-être que vous pouvez essayer de postuler,
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
brut
number sex
0 1 male
1 2 female
2 3 female
3 4 female
4 5 male
après utilisation appliquer
number sex sex_new
0 1 male 1
1 2 female 0
2 3 female 0
3 4 female 0
4 5 male 1