배열에서 nan 값을 제거하는 방법을 알고 싶습니다. 내 배열은 다음과 같습니다.
x = [1400, 1500, 1600, nan, nan, nan ,1700] #Not in this exact configuration
에서 nan
값을 x
어떻게 제거 합니까?
답변
배열에 numpy를 사용하는 경우 다음을 사용할 수도 있습니다
x = x[numpy.logical_not(numpy.isnan(x))]
동등하게
x = x[~numpy.isnan(x)]
[추가 된 속기 덕분에 chbrown에게 감사합니다]
설명
내부 함수 는 숫자가 아닌 모든 numpy.isnan
값을 갖는 부울 / 논리 배열을 반환합니다 . 우리가 반대 할 때, 우리는 논리되지 연산자를 사용 과 배열을 가져 오는 그 모든 곳들 입니다 유효한 번호.True
x
~
True
x
마지막으로이 논리 형 배열을 사용 x
하여 NaN 이외의 값만 검색하기 위해 원래 배열로 색인을 생성 합니다.
답변
filter(lambda v: v==v, x)
v! = v 이후 NaN에 대해서만리스트와 numpy 배열에 모두 작동합니다.
답변
이 시도:
import math
print [value for value in x if not math.isnan(value)]
자세한 내용은 List Comprehensions를 참조하십시오 .
답변
나에게 @jmetz의 대답은 효과가 없었지만 팬더를 사용하면 isnull ()을 사용했습니다.
x = x[~pd.isnull(x)]
답변
위를 수행 :
x = x[~numpy.isnan(x)]
또는
x = x[numpy.logical_not(numpy.isnan(x))]
동일한 변수 (x)로 재설정해도 실제 nan 값이 제거되지 않고 다른 변수를 사용해야한다는 것을 알았습니다. 다른 변수로 설정하면 nan이 제거되었습니다. 예 :
y = x[~numpy.isnan(x)]
답변
다른 사람들이 보듯이
x[~numpy.isnan(x)]
공장. 그러나 numpy dtype이 기본 데이터 유형이 아닌 경우 (예 : 객체 인 경우) 오류가 발생합니다. 이 경우 팬더를 사용할 수 있습니다.
x[~pandas.isna(x)] or x[~pandas.isnull(x)]
답변
허용 대답은 2 차원 배열의 모양을 변경합니다. Pandas dropna () 기능을 사용하여 여기에 해결책을 제시 합니다. 1D 및 2D 배열에서 작동합니다. 2D 경우 날씨를 선택하여을 포함 하는 행 또는 열 을 드롭 할 수 있습니다 np.nan
.
import pandas as pd
import numpy as np
def dropna(arr, *args, **kwarg):
assert isinstance(arr, np.ndarray)
dropped=pd.DataFrame(arr).dropna(*args, **kwarg).values
if arr.ndim==1:
dropped=dropped.flatten()
return dropped
x = np.array([1400, 1500, 1600, np.nan, np.nan, np.nan ,1700])
y = np.array([[1400, 1500, 1600], [np.nan, 0, np.nan] ,[1700,1800,np.nan]] )
print('='*20+' 1D Case: ' +'='*20+'\nInput:\n',x,sep='')
print('\ndropna:\n',dropna(x),sep='')
print('\n\n'+'='*20+' 2D Case: ' +'='*20+'\nInput:\n',y,sep='')
print('\ndropna (rows):\n',dropna(y),sep='')
print('\ndropna (columns):\n',dropna(y,axis=1),sep='')
print('\n\n'+'='*20+' x[np.logical_not(np.isnan(x))] for 2D: ' +'='*20+'\nInput:\n',y,sep='')
print('\ndropna:\n',x[np.logical_not(np.isnan(x))],sep='')
결과:
==================== 1D Case: ====================
Input:
[1400. 1500. 1600. nan nan nan 1700.]
dropna:
[1400. 1500. 1600. 1700.]
==================== 2D Case: ====================
Input:
[[1400. 1500. 1600.]
[ nan 0. nan]
[1700. 1800. nan]]
dropna (rows):
[[1400. 1500. 1600.]]
dropna (columns):
[[1500.]
[ 0.]
[1800.]]
==================== x[np.logical_not(np.isnan(x))] for 2D: ====================
Input:
[[1400. 1500. 1600.]
[ nan 0. nan]
[1700. 1800. nan]]
dropna:
[1400. 1500. 1600. 1700.]