NumPy 배열에서 NaN 값 제거하기
dropna() 함수 사용:
import numpy as np
# NaN 값을 포함하는 NumPy 배열 생성
array = np.array([1, 2, np.nan, 4, 5])
# dropna() 함수를 사용하여 NaN 값 제거
filtered_array = array.dropna()
print(filtered_array) # 출력: [1. 2. 4. 5.]
dropna()
함수는 기본적으로 축(axis) 1을 따라 NaN 값을 포함하는 모든 행을 제거합니다. 축을 지정하여 다른 축을 따라 NaN 값을 제거할 수도 있습니다.
isnan() 함수와 조건문 사용:
import numpy as np
# NaN 값을 포함하는 NumPy 배열 생성
array = np.array([1, 2, np.nan, 4, 5])
# isnan() 함수를 사용하여 NaN 값 확인
is_nan = np.isnan(array)
# 조건문을 사용하여 NaN 값 제거
result = []
for i in range(len(array)):
if not is_nan[i]:
result.append(array[i])
filtered_array = np.array(result)
print(filtered_array) # 출력: [1. 2. 4. 5.]
isnan()
함수는 NumPy 배열의 각 원소가 NaN인지 확인하는 데 사용됩니다. 조건문을 사용하여 NaN 값이 아닌 원소만 새로운 배열에 추가하여 NaN 값을 제거할 수 있습니다.
where() 함수 사용:
import numpy as np
# NaN 값을 포함하는 NumPy 배열 생성
array = np.array([1, 2, np.nan, 4, 5])
# where() 함수를 사용하여 NaN 값을 특정 값으로 대체
filtered_array = np.where(np.isnan(array), 0, array)
print(filtered_array) # 출력: [ 1. 2. 0. 4. 5.]
where()
함수는 조건에 따라 NumPy 배열의 원소를 다른 값으로 대체하는 데 사용됩니다. 위 예제에서는 np.isnan(array)
조건이 참인 경우 (즉, 원소가 NaN인 경우) 해당 원소를 0으로 대체합니다.
fill_value 매개변수를 사용하여 reshape() 함수 사용:
import numpy as np
# NaN 값을 포함하는 NumPy 배열 생성
array = np.array([1, 2, np.nan, 4, 5])
# reshape() 함수와 fill_value 매개변수를 사용하여 NaN 값을 0으로 대체
filtered_array = array.reshape(-1, 1).reshape((array.size - array.count(np.nan)), 1).filled(0)
print(filtered_array) # 출력: [[1.],[2.],[0.],[4.],[5.]]
reshape()
함수와 fill_value
매개변수를 사용하면 NaN 값을 특정 값으로 대체하면서 배열의 모양을 변경할 수 있습니다. 위 예제에서는 reshape(-1, 1)
을 사용하여 배열을 1열짜리 행렬로 변환하고, reshape((array.size - array.count(np.nan)), 1)
을 사용하여 NaN 값을 제외한 원소만 포함하는 새로운 행렬을 만듭니다. 마지막으로 filled(0)
을 사용하여 NaN 값을 0으로 채웁니다.
선택 방법
위에 설명된 방법 외에도 NumPy 배열에서 NaN 값을 제거하는 방법은 여러 가지가 있습니다. 사용하는 방법은 특정 상황과 필요에 따라 다릅니다.
- 빠르고 간단한 방법:
dropna()
함수를 사용하는 것이 가장 빠르고 간단한 방법입니다. - 특정 축을 따라 NaN 값 제거:
dropna()
함수와 축 인수를 사용하여 특정 축을 따라 NaN 값을 제거할 수 있습니다. - NaN 값을 다른 값으로 대체:
where()
함수 또는fill_value
매개변수를 사용하여reshape()
함수를 사용하여 NaN 값을 다른
NumPy 배열에서 NaN 값 제거 예제 코드 (Python)
dropna() 함수 사용
import numpy as np
# NaN 값을 포함하는 NumPy 배열 생성
array = np.array([1, 2, np.nan, 4, 5])
# dropna() 함수를 사용하여 NaN 값 제거
filtered_array = array.dropna()
print(filtered_array) # 출력: [1. 2. 4. 5.]
이 코드는 dropna()
함수를 사용하여 array
배열에서 NaN 값을 제거합니다. dropna()
함수는 기본적으로 축 1을 따라 NaN 값을 포함하는 모든 행을 제거합니다.
isnan() 함수와 조건문 사용
import numpy as np
# NaN 값을 포함하는 NumPy 배열 생성
array = np.array([1, 2, np.nan, 4, 5])
# isnan() 함수를 사용하여 NaN 값 확인
is_nan = np.isnan(array)
# 조건문을 사용하여 NaN 값 제거
result = []
for i in range(len(array)):
if not is_nan[i]:
result.append(array[i])
filtered_array = np.array(result)
print(filtered_array) # 출력: [1. 2. 4. 5.]
이 코드는 isnan()
함수를 사용하여 array
배열의 각 원소가 NaN인지 확인합니다. 그리고 조건문을 사용하여 NaN 값이 아닌 원소만 새로운 배열 result
에 추가합니다. 마지막으로 result
를 NumPy 배열로 변환하여 filtered_array
에 저장합니다.
where() 함수 사용
import numpy as np
# NaN 값을 포함하는 NumPy 배열 생성
array = np.array([1, 2, np.nan, 4, 5])
# where() 함수를 사용하여 NaN 값을 특정 값으로 대체
filtered_array = np.where(np.isnan(array), 0, array)
print(filtered_array) # 출력: [ 1. 2. 0. 4. 5.]
이 코드는 where()
함수를 사용하여 array
배열의 NaN 값을 0으로 대체합니다. where()
함수는 첫 번째 인수가 참인 경우 두 번째 인수를, 그렇지 않은 경우 세 번째 인수를 반환합니다. 즉, 이 코드에서는 np.isnan(array)
조건이 참인 경우 (즉, 원소가 NaN인 경우) 해당 원소를 0으로, 그렇지 않은 경우 원래 값을 반환합니다.
결론
NumPy 배열에서 NaN 값을 제거하는 다른 방법
numpy.ma.masked_array 사용:
import numpy as np
import numpy.ma as ma
# NaN 값을 포함하는 NumPy 배열 생성
array = np.array([1, 2, np.nan, 4, 5])
# masked_array로 변환
masked_array = ma.masked_array(array, mask=np.isnan(array))
# fill_value 매개변수를 사용하여 NaN 값을 특정 값으로 대체
filtered_array = masked_array.filled(fill_value=0)
print(filtered_array) # 출력: [1. 2. 0. 4. 5.]
numpy.ma
모듈은 masked_array
클래스를 제공합니다. masked_array
는 데이터 배열과 마스크 배열을 함께 저장하는 객체입니다. 마스크 배열은 각 원소가 유효한지 여부를 나타내는 True/False 값을 포함합니다.
위 코드에서는 masked_array
를 생성하고 fill_value
매개변수를 사용하여 NaN 값을 0으로 채웁니다.
pandas 라이브러리 사용:
import pandas as pd
# NaN 값을 포함하는 NumPy 배열 생성
array = np.array([1, 2, np.nan, 4, 5])
# Pandas Series로 변환
series = pd.Series(array)
# dropna() 메서드를 사용하여 NaN 값 제거
filtered_series = series.dropna()
# NumPy 배열로 변환
filtered_array = filtered_series.to_numpy()
print(filtered_array) # 출력: [1. 2. 4. 5.]
pandas
라이브러리는 데이터 분석 작업을 수행하는 데 유용한 도구입니다. NumPy 배열을 pandas
Series로 변환하고 dropna()
메서드를 사용하여 NaN 값을 제거한 다음 NumPy 배열로 다시 변환할 수 있습니다.
루프를 사용하여 직접 구현:
import numpy as np
# NaN 값을 포함하는 NumPy 배열 생성
array = np.array([1, 2, np.nan, 4, 5])
# 새로운 빈 배열 생성
filtered_array = []
# 루프를 사용하여 NaN 값이 아닌 원소만 새로운 배열에 추가
for i in range(len(array)):
if not np.isnan(array[i]):
filtered_array.append(array[i])
# NumPy 배열로 변환
filtered_array = np.array(filtered_array)
print(filtered_array) # 출력: [1. 2. 4. 5.]
위 코드는 루프를 사용하여 array
배열의 각 원소를 반복하고 NaN 값이 아닌 경우만 새로운 배열 filtered_array
에 추가합니다.
결론
python numpy nan