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


101

내 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이것을 우아하고 효율적으로 처리하는 방법이 있습니까?


8
pandashas pandas.isnull(): 그것이 귀하의 요구를 충족하는지 확실하지 않으므로 일부 예제 데이터가 좋을 수 있습니다.
Marius 2013 년

4
@Marius : pandas.isnull()완벽하게 작동하는 것 같습니다. 내가 현재 다루는 유일한 데이터 유형 numpy.isnan()은 문자열이며 pandas.isnull()잘 처리합니다. 사실, 내가 던진 모든 임의의 객체를 잘 처리하는 것 같습니다. 우려했던 특정 문제가 있었습니까? 그렇지 않으면 최소한 pandas 사용자에게는 정식 답변처럼 보이기 때문에 완전한 답변으로 의견을 제출할 수 있습니다.
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것이므로이를 처리 할 도구가 있습니다.

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

19

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

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

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


저는 다양한 유형의 데이터를 다루고 있습니다. 대부분의 열에는 int * 또는 float * 데이터 유형이 있지만 다른 유형은 모든 객체가 될 수 있지만 지금까지 내가 사용한 유일한 다른 유형은 문자열이었습니다.
Dun Peal 2013 년

파이썬의 문자열에는 dtype. 당신은 할 수있다type(val) == 'float'
pvarma

4
type(val) == float and np.isnan(val)- 나를 위해 일
대니 컬린을

@ user1930402 나는 이것이 일반 파이썬 배열이 아닌 numpy 배열이라고 가정하고 있습니다. 예 : np.array ([ "hello"]) [0] .dtype은 작동하지만 [ "hello"] [0] .dtype은 작동하지 않습니다
Hammer
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.