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 기능이있다
isnull
와notnull
이는 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.isnull
과 pd.notnull
비수 (NaN)에 누락 된 데이터를 테스트 할 수 있습니다.
NaN
수학적 연산에서 숫자 값으로 None
사용할 수 있지만 할 수 없습니다 (또는 적어도해서는 안됩니다).
NaN
IEEE 754 부동 소수점 표준에 정의 된 숫자 값 입니다. None
내부 Python 팁 ( NoneType
) 이며이 문맥에서 "숫자가 유효하지 않음"보다 "비 존재"또는 "비어 있음"과 비슷합니다.
그 주된 "증상"은 NaN을 포함하는 배열에서 평균 또는 합계를 수행하는 경우 (단일 하나라도) 결과적으로 NaN을 얻는다는 것입니다.
반면에 None
피연산자로 사용하여 수학 연산을 수행 할 수 없습니다 .
따라서 경우에 따라 None
계산에서 유효하지 않거나 존재하지 않는 값을 고려하지 않도록 알고리즘에 알리는 방법으로 사용할 수 있습니다 . 이는 알고리즘이 각 값을 테스트하여 None
.
Numpy에는 nansum
및 nan_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
'Programing' 카테고리의 다른 글
JQuery Ajax-Ajax 호출시 네트워크 연결 오류를 감지하는 방법 (0) | 2020.09.25 |
---|---|
서명되지 않은 APK는 설치할 수 없습니다. (0) | 2020.09.25 |
오류 ITMS-90035-Xcode (0) | 2020.09.25 |
DataContractSerializer 대 XmlSerializer : 각 serializer의 장단점 (0) | 2020.09.25 |
자바의 웹캠에서 이미지 캡처? (0) | 2020.09.25 |