programing

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

testmans 2023. 7. 24. 22:20
반응형

Python / numpy / panda에서 임의 객체가 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, 객체 배열의 없음/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.NaTdtype을 지정할 필요가 없습니다.)

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

당신의 타입은 정말 제멋대로입니까?만약 당신이 그것이 단지 인트플로트 또는 스트링이 될 것이라는 것을 안다면 당신은 그냥 할 수 있습니다.

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

그것이 numpy로 싸졌다고 가정하면, 그것은 항상 adtype을 가질 것이고 오직 float과 complex만이 NaN이 될 수 있습니다.

여기서 이 훌륭한 솔루션을 찾았습니다. 간단한 논리 NAN!=NAN. https://www.codespeedy.com/check-if-a-given-string-is-nan-in-python/

위의 예를 사용하여 다음을 간단히 수행할 수 있습니다.이것은 단순히 NAN이 NAN과 같지 않다는 사실을 활용하기 때문에 다양한 유형의 객체에서 작동해야 합니다.

 import numpy as np
 s = pd.Series(['apple', np.nan, 'banana'])
 s.apply(lambda x: x!=x)
 out[252]
 0    False
 1     True
 2    False
 dtype: bool

언급URL : https://stackoverflow.com/questions/18689512/efficiently-checking-if-arbitrary-object-is-nan-in-python-numpy-pandas

반응형