팬더 데이터 프레임에서 적용되는 플로트 배열 (일부 일반 숫자, 일부 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) 값으로 간주됩니다.
답변
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만이 자신과 같지 않기 때문입니다.
답변
@unutbu 답변 위에 pandas numpy 객체 배열을 네이티브 (float64) 유형으로 강제 할 수 있습니다.
import pandas as pd
pd.to_numeric(df['tester'], errors='coerce')
숫자 값으로 구문 분석 할 수없는 문자열이 NaN이되도록하려면 errors = ‘coerce’를 지정하십시오. 열 유형은 dtype: float64이며 isnan확인이 작동해야합니다.
답변
Pandas를 사용하여 csv 파일을 가져와야합니다.
import pandas as pd
condition = pd.isnull(data[i][j])
답변
