2016-07-24 3 views
0

Попытка использовать цикл для перебора столбцов и изменить Да и не до 1 и 0.Итерация по столбцам и переназначение значения - Панды/Python

По какой-то причине, я не подвожу ошибку сравнения недействителен типа, когда пытаясь это:

Panda DataFrame имеет несколько столбцов, один из которых "Комбинированных"

for col,row in d.iteritems(): 
    d.loc[d[col] == 'No', col] = 0 
    d.loc[d[col] == 'Yes', col] = 1 

TypeError: недопустимое сравнение типа

Для сравнение, я могу успешно выполнять это на одной колонке, без проблем:

d.loc[d['Combined'] == 'No', 'Combined'] = 0 
d.loc[d['Combined'] == 'Yes', 'Combined'] = 1 

Любая причина, почему затыкать значение седловине в функции цит вместо фактического имени столбца выдает ошибку? Нужно ли его преобразовывать в строку или что-то еще?

+0

Он отлично работает для меня. Можете ли вы поделиться полной трассировкой? – ayhan

+0

Я думаю, вы можете просто сделать: 'd = d.replace ('No', 0) .replace ('Yes', 1)' – root

ответ

0

Должны быть столбцы, которые принимают целочисленные значения, а для этих строк - это «недопустимое сравнение». Так что просто проверьте, есть ли у вас экземпляр str, и вам хорошо идти.

for col,row in d.iteritems(): 
    if isinstance(row[0], str): 
     d.loc[d[col] == 'No', col] = 0 
     d.loc[d[col] == 'Yes', col] = 1 

И по той же причине

d.loc[d['Combined'] == 'No', 'Combined'] = 0 

это прекрасно работает, так как его уже колонок с строковыми значениями.

+0

Это объясняет это отлично, спасибо! Будет ли это оптимальным способом перехода к изменению этих значений в кадре данных или будет лучший способ, чем то, что я пытаюсь? – ktorquem

+0

Есть лучшие способы ... что вы делаете, это «предварительная обработка данных». И у склеарна есть функция только для этой вещи. Heres link - http://scikit-learn.org/stable/modules/generated/sklearn.preprocessing.LabelEncoder.html – hashcode55

+1

'isinstance (row, str)' никогда не вернет True, поскольку тип строки - это Series. Вам нужно проверить тип серии. – ayhan

Смежные вопросы