pandas データフレームに適用した結果、浮動小数点数の配列 (一部は通常の数値、一部は NAN) が生成されます。
何らかの理由で、numpy.isnan はこの配列で失敗しますが、以下に示すように、各要素は float であり、numpy.isnan は各要素で正しく実行され、変数の型は間違いなく numpy 配列です。
どうしたの?!
set([type(x) for x in tester])
Out[59]: {float}
tester
Out[60]:
array([-0.7000000000000001, nan, nan, nan, nan, nan, nan, nan, nan, nan,
nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan,
nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan,
nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan,
nan, nan], dtype=object)
set([type(x) for x in tester])
Out[61]: {float}
np.isnan(tester)
Traceback (most recent call last):
File "<ipython-input-62-e3638605b43c>", line 1, in <module>
np.isnan(tester)
TypeError: ufunc 'isnan' not supported for the input types, and the inputs could not be safely coerced to any supported types according to the casting rule ''safe''
set([np.isnan(x) for x in tester])
Out[65]: {False, True}
type(tester)
Out[66]: numpy.ndarray
ベストアンサー1
np.isnan
ネイティブ dtype (np.float64 など) の NumPy 配列に適用できます。
In [99]: np.isnan(np.array([np.nan, 0], dtype=np.float64))
Out[99]: array([ True, False], dtype=bool)
ただし、オブジェクト配列に適用すると TypeError が発生します。
In [96]: np.isnan(np.array([np.nan, 0], dtype=object))
TypeError: ufunc 'isnan' not supported for the input types, and the inputs could not be safely coerced to any supported types according to the casting rule ''safe''
Pandasをお持ちなら、pd.isnull
代わりに、オブジェクトまたはネイティブ dtype の NumPy 配列を受け入れることができます。
In [97]: pd.isnull(np.array([np.nan, 0], dtype=float))
Out[97]: array([ True, False], dtype=bool)
In [98]: pd.isnull(np.array([np.nan, 0], dtype=object))
Out[98]: array([ True, False], dtype=bool)
None
オブジェクト配列では null 値としても扱われることに注意してください。