J'ai lu un fichier csv dans une base de données pandas et je voudrais convertir les colonnes avec les réponses binaires des chaînes de type yes/no en entiers de 1/0. Ci-dessous, je montre l'une de ces colonnes ("sampleDF" est la base de données pandas).
In [13]: sampleDF.housing[0:10]
Out[13]:
0 no
1 no
2 yes
3 no
4 no
5 no
6 no
7 no
8 yes
9 yes
Name: housing, dtype: object
L'aide est très appréciée!
Essaye ça:
sampleDF['housing'] = sampleDF['housing'].map({'yes': 1, 'no': 0})
# produces True/False
sampleDF['housing'] = sampleDF['housing'] == 'yes'
Ce qui précède renvoie les valeurs True/False qui sont essentiellement 1/0, respectivement. Les booléens supportent les fonctions de somme, etc. Si vous avez vraiment besoin que ce soit des valeurs 1/0, vous pouvez utiliser ce qui suit.
housing_map = {'yes': 1, 'no': 0}
sampleDF['housing'] = sampleDF['housing'].map(housing_map)
%timeit
sampleDF['housing'] = sampleDF['housing'].apply(lambda x: 0 if x=='no' else 1)
1,84 ms ± 56,2 µs par boucle (moyenne ± écart type de 7 passages, 1000 boucles chacun)
Remplace «oui» par 1, «non» par 0 pour la colonne df spécifiée.
Manière générique:
import pandas as pd
string_data = string_data.astype('category')
numbers_data = string_data.cat.codes
référence: https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.astype.html
Vous pouvez convertir une série de Boolean en entier de manière explicite:
sampleDF['housing'] = sampleDF['housing'].eq('yes').astype(int)
Essayez ce qui suit:
sampleDF['housing'] = sampleDF['housing'].str.lower().replace({'yes': 1, 'no': 0})
Le moyen facile de faire cela utilise des pandas comme ci-dessous:
housing = pd.get_dummies(sampleDF['housing'],drop_first=True)
après cette chute ce déposé de df principale
sampleDF.drop('housing',axis=1,inplace=True)
maintenant fusionner un nouveau dans vous df
sampleDF= pd.concat([sampleDF,housing ],axis=1)