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 値を削除する

これらの 2つの NumPy ソリューションとは別に、nan 値を削除する方法がさらに 2つあります。これらの 2つの方法には、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
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.