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.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
당신의 타입은 정말 제멋대로입니까?만약 당신이 그것이 단지 인트플로트 또는 스트링이 될 것이라는 것을 안다면 당신은 그냥 할 수 있습니다.
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
'programing' 카테고리의 다른 글
정적 방법의 목적은 무엇입니까?언제 사용해야 하는지 어떻게 알 수 있습니까? (0) | 2023.07.24 |
---|---|
PHP Mailer의 "SMTP 오류: 인증할 수 없음" (0) | 2023.07.24 |
Oracle SYS_GUID가 변경되지 않음 (0) | 2023.07.24 |
jQuery를 사용하여 텍스트 영역에 텍스트 삽입 (0) | 2023.07.24 |
루비에서 빈 파일 만들기: "터치" 동등한 것? (0) | 2023.07.19 |