2016-06-23 2 views
0

У меня есть pandas dataframe, который имеет много столбцов. Эти столбцы могут иметь 3 значения - True, False и NaN. Я заменяю NaN на строку missing. Значения выборки для одного из моих столбцов выглядит следующим образом:«Недопустимое сравнение типов» в коде

ConceptTemp.ix[:,1].values 

в результате:

array([ True, False, False, False, True, True, True, True, False, True], dtype=bool) 

Обратите внимание, что этот конкретный столбец не имел никакого NaN, и поэтому не missing строку.

Теперь я выполнить следующий код:

ConceptTemp.ix[:,1][ConceptTemp.ix[:,1] != 'missing'].values 

Чтобы получить следующее исключение:

--------------------------------------------------------------------------- 
TypeError         Traceback (most recent call last) 
<ipython-input-47-0a0b76cf3ab5> in <module>() 
----> 1 ConceptTemp.ix[:,1][ConceptTemp.ix[:,1] != 'missing'].values 

E:\Anaconda2\lib\site-packages\pandas\core\ops.pyc in wrapper(self, other, axis) 
    724     other = np.asarray(other) 
    725 
--> 726    res = na_op(values, other) 
    727    if isscalar(res): 
    728     raise TypeError('Could not compare %s type with Series' 

E:\Anaconda2\lib\site-packages\pandas\core\ops.pyc in na_op(x, y) 
    680     result = getattr(x, name)(y) 
    681     if result is NotImplemented: 
--> 682      raise TypeError("invalid type comparison") 
    683    except AttributeError: 
    684     result = op(x, y) 

TypeError: invalid type comparison 

ли кто-нибудь знает, как это исправить?

Любые указатели будут высоко оценены.

+0

Распечатайте 'ConceptTemp.ix [:, 1] .values' и доложить. – piRSquared

+0

Возможно, не совсем то, что вы ищете, но можете ли вы использовать 'isin'? 'ConceptTemp.ix [:, 0] [~ ConceptTemp.ix [:, 0] .isin (['missing'])]. Values' – johnchase

+0

Я отредактировал комментарий, который вы можете использовать' '' для инвертирования выбора – johnchase

ответ

3

Как люди прокомментировали, немного странно комбинировать типы в ваших массивах (т. Е. Строки с булевыми). Вы получите результаты, в которых булевский массив может быть не таким, каким вы его считаете. Но если вам абсолютно необходимо, есть несколько способов, которыми вы могли бы это сделать. Первый с isin:

In [40]: ConceptTemp.ix[:,0][~ConceptTemp.ix[:,0].isin(['missing'])].values 
Out[40]: 
     array([ True, False, False, False, True, True, True, True, False, True], dtype=bool) 

Второй с apply и lambda

In [41]: ConceptTemp.ix[:,0][ConceptTemp.ix[:,0].apply(lambda x: x != 'missing')].values 
Out[41]: 
     array([ True, False, False, False, True, True, True, True, False, True], dtype=bool) 
+0

Большое спасибо. «Лямбда» сделала это. Я согласен, что это немного неудобно, это сравнение типов. Но я делал это только потому, что хотел подмножество моей исходной 'dataframe'. – Patthebug

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