숫자가 아닌 값을 포함하는 numpy.ndarray의 모든 행을 제거하는 방법


97

기본적으로 데이터 분석을하고 있습니다. 나는 데이터 셋을 numpy.ndarray로 읽고 일부 값이 누락되었습니다 (단지 존재하지 않거나 존재 NaN하거나 " NA"로 쓰여진 문자열이 됨 ).

이와 같은 항목을 포함하는 모든 행을 정리하고 싶습니다. numpy ndarray로 어떻게 할 수 있습니까?

답변:


167
>>> a = np.array([[1,2,3], [4,5,np.nan], [7,8,9]])
array([[  1.,   2.,   3.],
       [  4.,   5.,  nan],
       [  7.,   8.,   9.]])

>>> a[~np.isnan(a).any(axis=1)]
array([[ 1.,  2.,  3.],
       [ 7.,  8.,  9.]])

이를에 재 할당합니다 a.

설명 : np.isnan(a)와 비슷한 배열 반환 , 다른 곳에서. 전체 행에 대한 논리 연산 을 사용 하여 배열을 로 축소 하고 대괄호 안에 있는 원래 배열의 행만 반전 하고 선택합니다 .TrueNaNFalse.any(axis=1)m*nnor~True/Falsea[ ]True


11
np.isfinite이 경우뿐만 아니라 ±Inf값을 제거하려는 경우에도 유용 합니다. ~유한 실수에 대해서만 true를 반환하므로는 필요하지 않습니다 .
naught101

7
@ naught101로 변경 any해야 all합니다. "모두가 유한 한"행을 선택하려고하기 때문에 "아무 것도 nan이 아닌"행을 선택하는 대신.
AnnanFay
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.