NumPy 배열에서 Nan 값 제거
-
NumPy에서
logical_not()
및isnan()
메서드를 사용하여 Nan 값 제거 -
NumPy에서
isfinite()
메서드를 사용하여 Nan 값 제거 -
math.isnan
방법을 사용하여 Nan 값 제거 -
pandas.isnull
메서드를 사용하여 Nan 값 제거
이 기사에서는nan
값을 삭제하는 데 사용할 수있는 내장 NumPy 함수에 대해 설명합니다.
NumPy에서logical_not()
및isnan()
메서드를 사용하여 Nan 값 제거
logical_not()
은 배열의 요소에 논리적NOT
을 적용하는 데 사용됩니다. isnan()
은 요소가 ’nan’인지 여부를 확인하는 부울 함수입니다.
isnan()
함수를 사용하여 모든nan
값에 대해False
를, 모든nan
값에 대해True
를 갖는 부울 배열을 만들 수 있습니다. 다음으로,logical_not()
함수를 사용하여True
를False
로 또는 그 반대로 변환 할 수 있습니다.
마지막으로 부울 인덱싱을 사용하여 원래 NumPy 배열에서nan
이 아닌 모든 값을 필터링 할 수 있습니다. 값이True
인 모든 인덱스는 NumPy 배열을 필터링하는 데 사용됩니다.
이러한 기능에 대한 자세한 내용은 각각 공식 문서 및 여기를 참조하십시오.
솔루션은 다음 코드 스 니펫을 참조하십시오.
import numpy as np
myArray = np.array([1, 2, 3, np.nan, np.nan, 4, 5, 6, np.nan, 7, 8, 9, np.nan])
output1 = myArray[np.logical_not(np.isnan(myArray))] # Line 1
output2 = myArray[~np.isnan(myArray)] # Line 2
print(myArray)
print(output1)
print(output2)
출력:
[ 1. 2. 3. nan nan 4. 5. 6. nan 7. 8. 9. nan]
[1. 2. 3. 4. 5. 6. 7. 8. 9.]
[1. 2. 3. 4. 5. 6. 7. 8. 9.]
Line 2
은Line 1
의 단순화 된 버전입니다.
NumPy에서isfinite()
메서드를 사용하여 Nan 값 제거
이름에서 알 수 있듯이isfinite()
함수는 요소가 유한 여부를 확인하는 부울 함수입니다. 또한 배열의 유한 값을 확인하고 동일한 값에 대해 부울 배열을 반환 할 수 있습니다. 부울 배열은 모든nan
값에 대해False
를 저장하고 모든 유한 값에 대해True
를 저장합니다.
이 함수를 사용하여 대상 배열에 대한 부울 배열을 검색합니다. 부울 인덱싱을 사용하여 모든 유한 값을 필터링합니다. 다시 말하지만, 위에서 언급했듯이True
값이있는 인덱스가 배열을 필터링하는 데 사용됩니다.
다음은 예제 코드입니다.
import numpy as np
myArray1 = np.array([1, 2, 3, np.nan, np.nan, 4, 5, 6, np.nan, 7, 8, 9, np.nan])
myArray2 = np.array([np.nan, np.nan, np.nan, np.nan, np.nan, np.nan])
myArray3 = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
output1 = myArray1[np.isfinite(myArray1)]
output2 = myArray2[np.isfinite(myArray2)]
output3 = myArray3[np.isfinite(myArray3)]
print(myArray1)
print(myArray2)
print(myArray3)
print(output1)
print(output2)
print(output3)
출력:
[ 1. 2. 3. nan nan 4. 5. 6. nan 7. 8. 9. nan]
[nan nan nan nan nan nan]
[ 1 2 3 4 5 6 7 8 9 10]
[1. 2. 3. 4. 5. 6. 7. 8. 9.]
[]
[ 1 2 3 4 5 6 7 8 9 10]
이 기능에 대한 자세한 내용은 공식 문서를 참조하십시오.
math.isnan
방법을 사용하여 Nan 값 제거
이 두 가지 NumPy 솔루션 외에도nan
값을 제거하는 두 가지 방법이 더 있습니다. 이 두 가지 방법에는math
라이브러리의isnan()
함수와pandas
라이브러리의isnull
함수가 포함됩니다. 이 두 함수는 요소가nan
인지 여부를 확인하고 부울 결과를 반환합니다.
다음은isnan()
메소드를 사용하는 솔루션입니다.
import numpy as np
import math
myArray1 = np.array([1, 2, 3, np.nan, np.nan, 4, 5, 6, np.nan, 7, 8, 9, np.nan])
myArray2 = np.array([np.nan, np.nan, np.nan, np.nan, np.nan, np.nan])
myArray3 = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
booleanArray1 = [not math.isnan(number) for number in myArray1]
booleanArray2 = [not math.isnan(number) for number in myArray2]
booleanArray3 = [not math.isnan(number) for number in myArray3]
print(myArray1)
print(myArray2)
print(myArray3)
print(myArray1[booleanArray1])
print(myArray2[booleanArray2])
print(myArray3[booleanArray3])
출력:
[ 1. 2. 3. nan nan 4. 5. 6. nan 7. 8. 9. nan]
[nan nan nan nan nan nan]
[ 1 2 3 4 5 6 7 8 9 10]
[1. 2. 3. 4. 5. 6. 7. 8. 9.]
[]
[ 1 2 3 4 5 6 7 8 9 10]
pandas.isnull
메서드를 사용하여 Nan 값 제거
다음은pandas
의isnull()
메소드를 사용하는 솔루션입니다.
import numpy as np
import pandas as pd
myArray1 = np.array([1, 2, 3, np.nan, np.nan, 4, 5, 6, np.nan, 7, 8, 9, np.nan])
myArray2 = np.array([np.nan, np.nan, np.nan, np.nan, np.nan, np.nan])
myArray3 = np.array([1, 2, 3, 4, 5, 6, 7, 8, 9, 10])
booleanArray1 = [not pd.isnull(number) for number in myArray1]
booleanArray2 = [not pd.isnull(number) for number in myArray2]
booleanArray3 = [not pd.isnull(number) for number in myArray3]
print(myArray1)
print(myArray2)
print(myArray3)
print(myArray1[booleanArray1])
print(myArray2[booleanArray2])
print(myArray3[booleanArray3])
print(myArray1[~pd.isnull(myArray1)]) # Line 1
print(myArray2[~pd.isnull(myArray2)]) # Line 2
print(myArray3[~pd.isnull(myArray3)]) # Line 3
출력:
[ 1. 2. 3. nan nan 4. 5. 6. nan 7. 8. 9. nan]
[nan nan nan nan nan nan]
[ 1 2 3 4 5 6 7 8 9 10]
[1. 2. 3. 4. 5. 6. 7. 8. 9.]
[]
[ 1 2 3 4 5 6 7 8 9 10]
[1. 2. 3. 4. 5. 6. 7. 8. 9.]
[]
[ 1 2 3 4 5 6 7 8 9 10]