NumPy 배열에서 Nan 값 제거

Vaibhav Vaibhav 2023년1월30일
  1. NumPy에서logical_not()isnan()메서드를 사용하여 Nan 값 제거
  2. NumPy에서isfinite()메서드를 사용하여 Nan 값 제거
  3. math.isnan방법을 사용하여 Nan 값 제거
  4. pandas.isnull메서드를 사용하여 Nan 값 제거
NumPy 배열에서 Nan 값 제거

이 기사에서는nan값을 삭제하는 데 사용할 수있는 내장 NumPy 함수에 대해 설명합니다.

NumPy에서logical_not()isnan()메서드를 사용하여 Nan 값 제거

logical_not()은 배열의 요소에 논리적NOT을 적용하는 데 사용됩니다. isnan()은 요소가 ’nan’인지 여부를 확인하는 부울 함수입니다.

isnan()함수를 사용하여 모든nan값에 대해False를, 모든nan값에 대해True를 갖는 부울 배열을 만들 수 있습니다. 다음으로,logical_not()함수를 사용하여TrueFalse로 또는 그 반대로 변환 할 수 있습니다.

마지막으로 부울 인덱싱을 사용하여 원래 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 2Line 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 값 제거

다음은pandasisnull()메소드를 사용하는 솔루션입니다.

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]
Vaibhav Vaibhav avatar Vaibhav Vaibhav avatar

Vaibhav is an artificial intelligence and cloud computing stan. He likes to build end-to-end full-stack web and mobile applications. Besides computer science and technology, he loves playing cricket and badminton, going on bike rides, and doodling.