Есть ли простой способ изменить столбец да/нет на 1/0 в Pandas dataframe?

Я прочитал файл csv в фрейме pandas и хотел бы преобразовать столбцы с двоичными ответами из строк да/нет в целые числа 1/0. Ниже я показываю один из таких столбцов ( "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

Помощь очень ценится!

Ответ 1

метод 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))

метод 4

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

метод 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)))

введите описание изображения здесь

Ответ 2

Попробуйте следующее:

sampleDF['housing'] = sampleDF['housing'].map({'yes': 1, 'no': 0})

Ответ 3

# produces True/False
sampleDF['housing'] = sampleDF['housing'] == 'yes'

Приведенное выше возвращает значения True/False, которые по существу равны 1/0 соответственно. Булевы поддерживают функции суммы и т.д. Если вам действительно нужны значения 1/0, вы можете использовать следующее.

housing_map = {'yes': 1, 'no': 0}
sampleDF['housing'] = sampleDF['housing'].map(housing_map)

Ответ 4

%timeit
sampleDF['housing'] = sampleDF['housing'].apply(lambda x: 0 if x=='no' else 1)

1,84 мс ± 56,2 мкс на петлю (среднее ± стандартное отклонение 7 прогонов, 1000 циклов каждый)

  

Заменяет "yes" на 1, "no" с 0 для указанного столбца df.

  

Ответ 6

Попробуйте следующее:

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

Ответ 7

Вы можете преобразовать ряд из Boolean в целое число явно:

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