2016-12-01 4 views
9

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

Справка высоко ценится!

+7

'sampleDF.housing.replace (('да', 'нет'), (1, 0), Inplace = True)' – AChampion

+0

Это делает работу, спасибо! – Mushu909

ответ

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

Попробуйте это:

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

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

времени
данного образца

enter image description here

времени
образец длиной
sample = pd.DataFrame(dict(housing=np.random.choice(('yes', 'no'), size=100000)))

enter image description here

+0

Это отличный ответ. Я бы даже не подумал о некоторых из них. –

+0

Я желаю вам счастливого Рождества! Маленький подарок (3) и если что-то не так, так жаль! Последнее недоразумение было некрасиво, но на самом деле я не делаю что-то не так, может быть, скоро напишу комментарий для объяснения ... Так что удачи и спасибо за помощь! – jezrael

+0

С Рождеством! Что бы ни случилось, это не меняет того факта, что я желаю вам и вашей семье лучших (-: – piRSquared

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

1,84 мс ± 56,2 мкс на петле (среднее значение ± станд. девиация7 трасс, 1000 петель каждая)

Заменяет 'да' с 1, 'нет' с 0 для столбца ф.р. указанного.