web-dev-qa-db-de.com

Gibt es eine einfache Möglichkeit, eine Spalte von Ja/Nein in 1/0 in einem Pandas-Datenrahmen zu ändern?

Ich lese eine csv-Datei in einen Pandas-Datenrahmen und möchte die Spalten mit binären Antworten von den Zeichenfolgen Ja/Nein in Ganzzahlen von 1/0 konvertieren. Im Folgenden zeige ich eine dieser Spalten ("sampleDF" ist der Pandas-Datenrahmen).

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

Hilfe wird sehr geschätzt!

20
Mushu909

Methode 1

sample.housing.eq('yes').mul(1)

Methode 2

pd.Series(np.where(sample.housing.values == 'yes', 1, 0),
          sample.index)

Methode 3

sample.housing.map(dict(yes=1, no=0))

Methode 4

pd.Series(map(lambda x: dict(yes=1, no=0)[x],
              sample.housing.values.tolist()), sample.index)

Methode 5

pd.Series(np.searchsorted(['no', 'yes'], sample.housing.values), sample.index)

Alle ergeben

0    0
1    0
2    1
3    0
4    0
5    0
6    0
7    0
8    1
9    1

timing
gegebene Probe

enter image description here

timing
lange Probe
sample = pd.DataFrame(dict(housing=np.random.choice(('yes', 'no'), size=100000)))

enter image description here

44
piRSquared

Versuche dies:

sampleDF['housing'] = sampleDF['housing'].map({'yes': 1, 'no': 0})
6
aws_apprentice
# produces True/False
sampleDF['housing'] = sampleDF['housing'] == 'yes'

Das obige gibt True/False-Werte zurück, die im Wesentlichen 1/0 sind. Booleans unterstützen Summenfunktionen usw. Wenn Sie wirklich 1/0 Werte benötigen, können Sie die folgenden verwenden.

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 us pro Schleife (Mittelwert ± Standardabweichung von 7 Durchläufen, jeweils 1000 Schleifen)

Ersetzt 'yes' durch 1, 'no' durch 0 für die angegebene Spalte df.

2
SriramKRaju

Generischer Weg:

import pandas as pd
string_data = string_data.astype('category')
numbers_data = string_data.cat.codes

referenz: https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.astype.html

2
Siddaram H

Verwenden Sie den LabelEncoder von sklearn

from sklearn.preprocessing import LabelEncoder

lb = LabelEncoder() 
sampleDF['housing'] = lb.fit_transform(sampleDF['housing'])

Quelle

1
Freek Nortier

Sie können eine Reihe von Boolean explizit in eine Ganzzahl konvertieren:

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

Eine einfache und intuitive Möglichkeit, den gesamten Datenrahmen in Nullen und Einsen zu konvertieren, könnte sein:

sampleDF = sampleDF.replace(to_replace = "yes", value = 1)
sampleDF = sampleDF.replace(to_replace = "no", value = 0)
0
Josmy Faure

Versuche Folgendes:

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

Der einfache Weg, dies zu tun, benutzt Pandas wie folgt:

housing = pd.get_dummies(sampleDF['housing'],drop_first=True)

nach diesem drop wurde dies vom main df abgelegt 

sampleDF.drop('housing',axis=1,inplace=True)

füge jetzt eine neue in dir ein df

sampleDF= pd.concat([sampleDF,housing ],axis=1)
0
Eslamspot