팬더 데이터 프레임에서 적용되는 플로트 배열 (일부 일반 숫자, 일부 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])