반응형
Numpy isnan ()이 float 배열에서 실패합니다 (pandas 데이터 프레임 적용).
팬더 데이터 프레임에서 적용되는 플로트 배열 (일부 일반 숫자, 일부 nans)이 있습니다.
어떤 이유로 numpy.isnan이이 배열에서 실패하지만 아래에 표시된 것처럼 각 요소는 부동 소수점이고 numpy.isnan은 각 요소에서 올바르게 실행되며 변수 유형은 확실히 numpy 배열입니다.
무슨 일이야?!
set([type(x) for x in tester])
Out[59]: {float}
tester
Out[60]:
array([-0.7000000000000001, nan, nan, nan, nan, nan, nan, nan, nan, nan,
nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan,
nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan,
nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan, nan,
nan, nan], dtype=object)
set([type(x) for x in tester])
Out[61]: {float}
np.isnan(tester)
Traceback (most recent call last):
File "<ipython-input-62-e3638605b43c>", line 1, in <module>
np.isnan(tester)
TypeError: ufunc 'isnan' not supported for the input types, and the inputs could not be safely coerced to any supported types according to the casting rule ''safe''
set([np.isnan(x) for x in tester])
Out[65]: {False, True}
type(tester)
Out[66]: numpy.ndarray
np.isnan
네이티브 dtype (예 : np.float64)의 NumPy 배열에 적용 할 수 있습니다.
In [99]: np.isnan(np.array([np.nan, 0], dtype=np.float64))
Out[99]: array([ True, False], dtype=bool)
그러나 객체 배열에 적용될 때 TypeError를 발생시킵니다.
In [96]: np.isnan(np.array([np.nan, 0], dtype=object))
TypeError: ufunc 'isnan' not supported for the input types, and the inputs could not be safely coerced to any supported types according to the casting rule ''safe''
Pandas가 있으므로 pd.isnull
대신 사용할 수 있습니다. 객체 또는 기본 dtype의 NumPy 배열을 허용 할 수 있습니다.
In [97]: pd.isnull(np.array([np.nan, 0], dtype=float))
Out[97]: array([ True, False], dtype=bool)
In [98]: pd.isnull(np.array([np.nan, 0], dtype=object))
Out[98]: array([ True, False], dtype=bool)
참고 None
또한 객체 배열에 널 (null) 값으로 간주됩니다.
@unubtu 답변 위에 pandas numpy 객체 배열을 네이티브 (float64) 유형으로 강제 할 수 있습니다.
import pandas as pd
pd.to_numeric(df['tester'], errors='coerce')
숫자 값으로 구문 분석 할 수없는 문자열이 NaN이되도록하려면 errors = 'coerce'를 지정하십시오. 열 유형은 dtype: float64
이며 isnan
확인이 작동해야합니다.
np.isnan () 및 pd.isnull ()의 훌륭한 대체품은 다음과 같습니다.
for i in range(0,a.shape[0]):
if(a[i]!=a[i]):
//do something here
//a[i] is nan
nan만이 자신과 같지 않기 때문입니다.
반응형
'developer tip' 카테고리의 다른 글
Google Maps API는 AJAX를 사용할 때만 "Uncaught ReferenceError : google is not defined"를 발생시킵니다. (0) | 2020.10.19 |
---|---|
다중 / 인 테이블 유효? (0) | 2020.10.19 |
jQuery 객체 및 DOM 요소 (0) | 2020.10.19 |
JIRA : 닫거나 해결하려면? (0) | 2020.10.19 |
'네트워크 서비스'로 '실행'하려면 어떻게해야합니까? (0) | 2020.10.19 |