私のnumpy配列はnp.nan
を使用して欠損値を指定します。データセットを反復処理する際、そのような欠損値を検出し、特別な方法で処理する必要があります。
単純にnumpy.isnan(val)
を使用しました。これは、val
がnumpy.isnan()
でサポートされている型のサブセットに含まれていない限り、うまく機能します。たとえば、文字列フィールドで欠落データが発生する可能性があります。
>>> np.isnan('some_string')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
TypeError: Not implemented for this type
例外をキャッチしてFalse
を返す高価なラッパーを書く以外に、これをエレガントかつ効率的に処理する方法はありますか?
pandas.isnull()
(新しいバージョンではpd.isna()
)は、数値配列と文字列/オブジェクト配列の両方の欠損値をチェックします。ドキュメントから、次のことを確認します。
数値配列のNaN、オブジェクト配列のNone/NaN
簡単な例:
import pandas as pd
import numpy as np
s = pd.Series(['Apple', np.nan, 'banana'])
pd.isnull(s)
Out[9]:
0 False
1 True
2 False
dtype: bool
numpy.nan
を使用して欠損値を表すという考え方は、pandas
が導入したものであり、そのため、pandas
に対処するツールがあります。
日時も(pd.NaT
を使用する場合、dtypeを指定する必要はありません)
In [24]: s = Series([Timestamp('20130101'),np.nan,Timestamp('20130102 9:30')],dtype='M8[ns]')
In [25]: s
Out[25]:
0 2013-01-01 00:00:00
1 NaT
2 2013-01-02 09:30:00
dtype: datetime64[ns]``
In [26]: pd.isnull(s)
Out[26]:
0 False
1 True
2 False
dtype: bool
あなたの型は本当にarbitrary意的ですか?あなたがそれがint floatまたはstringになることを知っているなら、あなたはちょうどすることができます
if val.dtype == float and np.isnan(val):
numpyでラップされていると仮定すると、常にdtypeを持ち、floatとcomplexのみがNaNになります