web-dev-qa-db-fra.com

Existe-t-il un moyen simple de changer une colonne de oui/non en 1/0 dans un cadre de données Pandas?

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!

20
Mushu909

Essaye ça:

sampleDF['housing'] = sampleDF['housing'].map({'yes': 1, 'no': 0})
6
aws_apprentice
# 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)
4
3novak
%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.

2
SriramKRaju

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

2
Siddaram H

Vous pouvez convertir une série de Boolean en entier de manière explicite:

sampleDF['housing'] = sampleDF['housing'].eq('yes').astype(int)
0
jpp

Essayez ce qui suit:

sampleDF['housing'] = sampleDF['housing'].str.lower().replace({'yes': 1, 'no': 0})
0
Sazzad

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)
0
Eslamspot