1. ホーム
  2. python

[解決済み] コード内の「無効な型比較

2022-02-09 07:39:27

質問

を持っています。 pandas dataframe は多くのカラムを持っています。これらのカラムは3つの値 - True、False、NaNを持つことができる。私は NaN という文字列を missing . 私のカラムの1つのサンプル値は次のとおりです。

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

どなたか修正方法をご存知でしょうか?

何かご指摘があれば、ぜひお願いします。

どのように解決するのですか?

コメントにもあるように、配列の中で型を組み合わせるのは少し変です(例えば文字列とブール値)。ブーリアン配列は、あなたが考えているような結果にはならないかもしれません。しかし、どうしても必要な場合は、いくつかの方法があります。ひとつは 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)

2つ目は applylambda

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)