[python] Python / numpy / pandas에서 임의의 객체가 NaN인지 효율적으로 확인합니까?

내 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것이므로이를 처리 할 도구가 있습니다.

Datetimes도 (사용 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


답변

당신의 유형은 정말 임의적입니까? int float 또는 string이 될 것이라는 것을 알고 있다면 그냥 할 수 있습니다.

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

numpy로 래핑되었다고 가정하면 항상 dtype을 가지며 float 및 complex 만 NaN 일 수 있습니다.


답변