Python / numpy / pandasで任意のオブジェクトがNaNであるかどうかを効率的にチェックしていますか?


101

私の派手な配列は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に、これをエレガントかつ効率的に処理する方法はありますか?


8
pandas持っているpandas.isnull():それがあなたのニーズを満たしているかどうかわからないので、いくつかのサンプルデータが良いかもしれません。
マリウス

4
@Marius:pandas.isnull()完全に動作するようです。私が現在扱っている唯一のデータ型numpy.isnan()は、文字列でありpandas.isnull()、適切に処理されます。実際、私が投げた任意のオブジェクトはすべてうまく処理できるようです。懸念されていた特定の問題はありましたか?それ以外の場合は、少なくともパンダのユーザーにとっては標準的な回答のように思えるため、コメントを本格的な回答として送信することをお勧めします。
Dun Peal 2013

回答:


169

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

19

あなたのタイプは本当に任意ですか?あなたがそれがちょうどint浮動小数点または文字列になるつもりであることがわかっているなら、あなたはただ行うことができます

 if val.dtype == float and np.isnan(val):

numpyでラップされていると仮定すると、常にdtypeがあり、浮動小数点数と複素数のみがNaNになります


私はさまざまな種類のデータを扱っています。ほとんどの列にはint *またはfloat *データ型がありますが、他の列は任意のオブジェクトにすることができますが、これまでのところ、使用したのは文字列だけでした。
Dun Peal 2013

Pythonの文字列にははありませんdtype。あなたがしなければならないかもしれませんtype(val) == 'float'
pvarma

4
type(val) == float and np.isnan(val)-私のために働いた
ダニー・カレン

@ user1930402これらは通常のpythonの配列ではなく、派手な配列であると想定しています。例:np.array(["hello"])[0] .dtypeは機能しますが、["hello"] [0] .dtypeは機能しません
Hammer
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.