숫자가 아닌 값을 포함하는 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.