web-dev-qa-db-ja.com

Pandasデータフレームでyes / noの列を1/0に変更する簡単な方法はありますか?

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

ヘルプは大歓迎です!

24
Mushu909

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
_

タイミング
与えられたサンプル

enter image description here

タイミング
長いサンプル
sample = pd.DataFrame(dict(housing=np.random.choice(('yes', 'no'), size=100000)))

enter image description here

44
piRSquared

これを試して:

sampleDF['housing'] = sampleDF['housing'].map({'yes': 1, 'no': 0})
7
aws_apprentice
# 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)
6
3novak
%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に置き換えます。

5
SriramKRaju

一般的な方法:

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

2
Siddaram H

シリーズを明示的にブールから整数に変換できます。

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

SklearnのLabelEncoderを使用する

from sklearn.preprocessing import LabelEncoder

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

ソース

1
Freek Nortier

データフレーム全体を0と1に変換するシンプルで直感的な方法は次のとおりです。

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

以下を試してください:

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

これを行う簡単な方法は、以下のように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)
0
Eslamspot