Есть ли простой способ изменить столбец да/нет на 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.
Ответ 5
Общий способ:
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
Ответ 6
Попробуйте следующее:
sampleDF['housing'] = sampleDF['housing'].str.lower().replace({'yes': 1, 'no': 0})
Ответ 7
Вы можете преобразовать ряд из Boolean в целое число явно:
sampleDF['housing'] = sampleDF['housing'].eq('yes').astype(int)