Csvファイルをpandasデータフレームに読み込み、yes/noの文字列から1/0の整数へのバイナリ応答の列を変換したいと思います。以下に、そのような列の1つを示します。 ( "sampleDF"は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
ヘルプは大歓迎です!
method 1
_sample.housing.eq('yes').mul(1)
_
方法2
_pd.Series(np.where(sample.housing.values == 'yes', 1, 0),
sample.index)
_
方法3
_sample.housing.map(dict(yes=1, no=0))
_
method 4
_pd.Series(map(lambda x: dict(yes=1, no=0)[x],
sample.housing.values.tolist()), sample.index)
_
method 5
_pd.Series(np.searchsorted(['no', 'yes'], sample.housing.values), sample.index)
_
すべての収量
_0 0
1 0
2 1
3 0
4 0
5 0
6 0
7 0
8 1
9 1
_
タイミング
与えられたサンプル
タイミング
長いサンプルsample = pd.DataFrame(dict(housing=np.random.choice(('yes', 'no'), size=100000)))
これを試して:
sampleDF['housing'] = sampleDF['housing'].map({'yes': 1, 'no': 0})
# produces True/False
sampleDF['housing'] = sampleDF['housing'] == 'yes'
上記は、それぞれ本質的に1/0であるTrue/False値を返します。ブール値は合計関数などをサポートします。本当に1/0値にする必要がある場合は、次を使用できます。
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(平均±標準偏差7実行、各1000ループ)
指定されたdf列の「yes」を1、「no」を0に置き換えます。
一般的な方法:
import pandas as pd
string_data = string_data.astype('category')
numbers_data = string_data.cat.codes
参照: https://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.astype.html
シリーズを明示的にブールから整数に変換できます。
sampleDF['housing'] = sampleDF['housing'].eq('yes').astype(int)
SklearnのLabelEncoderを使用する
from sklearn.preprocessing import LabelEncoder
lb = LabelEncoder()
sampleDF['housing'] = lb.fit_transform(sampleDF['housing'])
データフレーム全体を0と1に変換するシンプルで直感的な方法は次のとおりです。
sampleDF = sampleDF.replace(to_replace = "yes", value = 1)
sampleDF = sampleDF.replace(to_replace = "no", value = 0)
以下を試してください:
sampleDF['housing'] = sampleDF['housing'].str.lower().replace({'yes': 1, 'no': 0})
これを行う簡単な方法は、以下のようにpandasを使用します。
housing = pd.get_dummies(sampleDF['housing'],drop_first=True)
その後、メインdfからこのファイルをドロップします
sampleDF.drop('housing',axis=1,inplace=True)
今あなたの新しいものをマージしますdf
sampleDF= pd.concat([sampleDF,housing ],axis=1)