Programing

NaN과 None의 차이점은 무엇입니까?

lottogame 2020. 9. 25. 08:10
반응형

NaN과 None의 차이점은 무엇입니까?


팬더를 사용하여 csv 파일의 두 열을 읽은 readcsv()다음 값을 사전에 할당합니다. 열에는 숫자와 문자의 문자열이 포함됩니다. 때때로 셀이 비어있는 경우가 있습니다. 제 생각에는 해당 사전 항목에 읽은 값이 있어야 None하지만 대신 nan할당됩니다. 확실히 None이 널 값이 같은 반면, 빈 셀의 더 자세한 설명입니다 nan단지는 값 읽기 수없는 것을 말한다.

내 올바른 이해되어, 차이점은 무엇인가 None와는 nan? nan대신 할당 된 이유는 무엇 None입니까?

또한 빈 셀에 대한 내 사전 검사는 다음을 사용하고 있습니다 numpy.isnan().

for k, v in my_dict.iteritems():
    if np.isnan(v):

그러나 이것은이 검사를 사용할 수 없다는 오류를 제공합니다 v. 문자열이 아닌 정수 또는 부동 변수가 사용되기 때문이라고 생각합니다. 이것이 사실이라면 어떻게 v"빈 셀"/ nan케이스를 확인할 수 있습니까?


NaN의 자리 표시 자로 사용되는 누락 된 데이터를 지속적으로 팬더에 일관성이 좋다. 나는 보통 NaN을 "missing" 으로 읽거나 번역 합니다. 또한 문서의 '누락 된 데이터 작업' 섹션을 참조하십시오 .

Wes는 'NA- 표현의 선택' 이라는 문서에 다음과 같이 씁니다 .

수년간의 프로덕션 사용 후에 [NaN]은 적어도 제 생각에는 NumPy와 Python의 전반적인 상황을 고려할 때 최상의 결정임을 입증했습니다. 특수한 값이 NaN (Not-A-번호)가 사용되는 모든 곳에서 NA의 값으로, 그리고 API 기능이있다 isnullnotnull이는 NA 값을 검출하기 위해 dtypes에 걸쳐 사용할 수 있습니다.
...
따라서, 저는 파이썬의 "실용성이 순도를 이깁니다"접근 방식을 선택하고 정수 NA 기능을 선택하여 부동 소수점 및 객체 배열에서 특수 값을 사용하여 NA를 표시하고 NA를 표시해야 할 때 정수 배열을 부동으로 승격시키는 훨씬 더 간단한 접근 방식을 사용했습니다. 도입.

참고 : 누락 된 데이터를 포함하는 정수 시리즈가 부동 소수점으로 업 캐스트된다는 "잘못" .

내 생각에 NaN (None 이상)을 사용하는 주된 이유는 덜 효율적인 객체 dtype이 아닌 numpy의 float64 dtype으로 저장할 수 있다는 것 입니다. NA 유형 프로모션을 참조하십시오 .

#  without forcing dtype it changes None to NaN!
s_bad = pd.Series([1, None], dtype=object)
s_good = pd.Series([1, np.nan])

In [13]: s_bad.dtype
Out[13]: dtype('O')

In [14]: s_good.dtype
Out[14]: dtype('float64')

Jeff는 이에 대해 (아래) 설명합니다.

np.nan벡터화 된 작업을 허용합니다. 그것의 float 값 None은 정의에 따라 객체 유형을 강제 적용하여 기본적으로 numpy의 모든 효율성을 비활성화합니다.

따라서 3 번 빠르게 반복 : object == bad, float == good

즉, 많은 작업이 None 대 NaN에서도 여전히 잘 작동 할 수 있습니다 (그러나 지원되지 않을 수 있습니다. 즉, 때때로 놀라운 결과를 제공 할 수 있음 ).

In [15]: s_bad.sum()
Out[15]: 1

In [16]: s_good.sum()
Out[16]: 1.0

: 두 번째 질문에 대답하려면,
당신은 사용해야 pd.isnullpd.notnull비수 (NaN)에 누락 된 데이터를 테스트 할 수 있습니다.


NaN수학적 연산에서 숫자 값으로 None사용할 수 있지만 할 수 없습니다 (또는 적어도해서는 안됩니다).

NaNIEEE 754 부동 소수점 표준에 정의 된 숫자 값 입니다. None내부 Python 팁 ( NoneType) 이며이 문맥에서 "숫자가 유효하지 않음"보다 "비 존재"또는 "비어 있음"과 비슷합니다.

그 주된 "증상"은 NaN을 포함하는 배열에서 평균 또는 합계를 수행하는 경우 (단일 하나라도) 결과적으로 NaN을 얻는다는 것입니다.

반면에 None피연산자로 사용하여 수학 연산을 수행 할 수 없습니다 .

따라서 경우에 따라 None계산에서 유효하지 않거나 존재하지 않는 값을 고려하지 않도록 알고리즘에 알리는 방법으로 사용할 수 있습니다 . 이는 알고리즘이 각 값을 테스트하여 None.

Numpy에는 nansumnan_to_num와 같이 NaN 값이 결과를 오염시키는 것을 방지하는 몇 가지 기능이 있습니다.


이 함수 isnan()는 무언가가 "숫자가 아님"인지 확인하고 변수가 숫자인지 여부를 반환합니다. 예를 들어 isnan(2)false를 반환합니다.

조건부 myVar is not None는 변수가 정의되었는지 여부를 반환합니다.

당신의 numpy 배열은 isnan()숫자의 배열이기 때문에 사용 하고 배열의 모든 요소를 NaN이러한 요소가 "빈"으로 간주 되도록 초기화합니다.


NaN stants for NOT a number.
None might stand for any.

참고URL : https://stackoverflow.com/questions/17534106/what-is-the-difference-between-nan-and-none

반응형