列に欠損値または NaN がある行を Pandas データフレームから削除する
データセットはさまざまな値で構成されます。これらの値は、「文字列 」、「整数 」、「10 進数 」、「ブール値 」、または「データ構造」 これらのデータセットは非常に価値があり、さまざまな目的に使用できます。データセットを利用して、モデルをトレーニングし、結果を解釈し、仮説を立て、アプリケーションを構築できます。
ただし、データセットには目的に必要のない値が含まれる場合があります。これらの値は「NaN 」(数値ではありません)と呼ばれます。この記事では、これらの「NaN 」または欠損値を扱います。
私たちの目的は、pandas データ フレームからの「NaN 」値を含む行にドロップすることです。データセットを利用してデータ フレームを作成し、パンダ ライブラリの関数を使用して行を削除します。本題から始めましょう。
NaN 値を使用した Pandas データ フレームの作成
pandas データ フレームは、データの分析、解釈、操作に広く使用されているデータの 2D 表形式の配置です。データを行と列に編成する使いやすいフレームワークです。 Pandas は、データの並べ替え、結合、フィルタリング、削除を可能にする多数の機能を提供します。 pandas データフレームを構築しましょう。
例
次の例では、各キーが列ラベルを表し、関連する値がリストを通じて表されるディクショナリ データセットを渡しました。
次に、「pd.DataFrame 」メソッドを通じて pandas データ フレームを作成しました。行ラベルのリストを渡しました。データセットでは、numpy ライブラリを通じていくつかの「NaN 」値を割り当てました。
import numpy as np
import pandas as pd
dataset = {"Student name": ["Ajay", "Krishna", "Deepak", "Swati"], "Roll number": [23, 45, np.nan, 18],
"Major Subject": ["Maths", "Physics", "Arts", "Political science"], "Marks": [57, numpy.nan, 98, numpy.nan]}
dataframe = pd.DataFrame(dataset, index= [1, 2, 3, 4])
print("The original data frame is: -")
print(dataframe)
出力
The original data frame is: -
Student name Roll number Major Subject Marks
1 Ajay 23.0 Maths 57.0
2 Krishna 45.0 Physics NaN
3 Deepak NaN Arts 98.0
4 Swati 18.0 Political science NaN
Dropna() 関数を使用して「NaN 」値を持つ行を削除する
「dropna() 」関数を使用して、データ フレームから行または列を削除できます。
データ フレームを作成した後、「dropna() 」関数を使用して、「NaN 」値を含むすべての行を削除しました。
変更された値を含む新しいデータ フレーム「drop_dataframe 」を作成し、印刷しました。
ここでは、2、3、4行目が削除されます。
例
import numpy as np
import pandas as pd
dataset = {"Student name": ["Ajay", "Krishna", "Deepak", "Swati"], "Roll number": [23, 45, np.nan, 18],
"Major Subject": ["Maths", "Physics", "Arts", "Political science"], "Marks": [57, np.nan, 98, np.nan]}
dataframe = pd.DataFrame(dataset, index= [1, 2, 3, 4])
print("The original data frame is: -")
print(dataframe)
drop_dataframe = dataframe.dropna()
print("The data frame after dropping the rows: -")
print(drop_dataframe)
出力
The original data frame is: -
Student name Roll number Major Subject Marks
1 Ajay 23.0 Maths 57.0
2 Krishna 45.0 Physics NaN
3 Deepak NaN Arts 98.0
4 Swati 18.0 Political science NaN
The data frame after dropping the rows: -
Student name Roll number Major Subject Marks
1 Ajay 23.0 Maths 57.0
新しいデータ フレームが不要な場合は、既存のデータ フレームを変更するだけで済みます。これは、「inplace=True 」句を渡すことで実現できます。
dataframe.dropna(inplace=True)
print("The data frame after dropping the rows: -")
print(dataframe)
「NaN 」値の行全体を削除する
「how=all 」句を「pd.DataFrame 」メソッドの引数として渡すと、すべての値が「NaN 」である行のみを削除できます。
例
import numpy as np
import pandas as pd
dataset = {"Student name": ["Ajay", "Krishna", np.nan, "Swati"], "Roll number": [23, 45, np.nan, 18],
"Major Subject": ["Maths", "Physics", np.nan, "Political science"], "Marks": [57, 25, np.nan, np.nan]}
dataframe = pd.DataFrame(dataset, index= [1, 2, 3, 4])
print("The original data frame is: -")
print(dataframe)
dataframe.dropna(how= "all", inplace= True)
print("The data frame after dropping the rows: -")
print(dataframe)
出力
Student name Roll number Major Subject Marks
1 Ajay 23.0 Maths 57.0
2 Krishna 45.0 Physics 25.0
3 NaN NaN NaN NaN
4 Swati 18.0 Political science NaN
The data frame after dropping the rows: -
Student name Roll number Major Subject Marks
1 Ajay 23.0 Maths 57.0
2 Krishna 45.0 Physics 25.0
4 Swati 18.0 Political science NaN
ここでは、「NaN 」値のみが含まれていたため、3 行目のみが削除されました。 「NaN 」値を削除するための条件を適用することもできますが、それはプログラマの目的とデータ フレームをどのように構築したいかによって異なります。
Fillna() 関数と Drop() 関数の使用
これは、欠損値のある行を削除する間接的な方法です。データ フレーム内に「NaN」値がいくつ存在するかわからないと仮定しましょう。このような場合、各列をチェックするための一般的なプログラムを作成します。
例
fillna() 関数を使用して、すべての「NaN」値を 1 に置き換えました。この後、「.index」メソッドを使用して、1 を含む列のインデックス値を取得しました。列の数がどのように含まれているかがわからないと仮定します。多くの「NaN 」値があるため、すべての列を含めました。 Drop() 関数を使用し、インデックス値のリストを渡して行を削除しました。
import numpy as np
import pandas as pd
dataset = {"Student name": ["Ajay", "Krishna", "Deepak", "Swati"], "Roll number": [23, 45, np.nan, 18],
"Major Subject": ["Maths", "Physics", "Arts", "Political science"], "Marks": [57, np.nan, 98, np.nan]}
dataframe = pd.DataFrame(dataset, index= [1, 2, 3, 4])
print("The original data frame is: -")
print(dataframe)
dataframe.fillna(1, inplace= True)
index_values = dataframe[(dataframe["Student name"] == 1) | (dataframe["Roll number"] == 1) |
(dataframe["Major Subject"] == 1) | (dataframe["Marks"] == 1)].index
dataframe.drop(index_values, inplace=True)
print("The data frame after dropping rows: -")
print(dataframe)
出力
The original data frame is: -
Student name Roll number Major Subject Marks
1 Ajay 23.0 Maths 57.0
2 Krishna 45.0 Physics NaN
3 Deepak NaN Arts 98.0
4 Swati 18.0 Political science NaN
The data frame after dropping rows: -
Student name Roll number Major Subject Marks
1 Ajay 23.0 Maths 57.0
結論
この記事では、pandas データ フレームから “NaN ” 値を含む行を削除する基本的な操作について説明しました。適切なデータセットを準備し、numpy ライブラリを使用してデータセットに「NaN 」値を含めました。 「dropna() 」関数の応用を理解しました。欠落したデータが削除され、新しいデータ フレームが生成されました。