ウェブサイト検索

列に欠損値または 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() 」関数の応用を理解しました。欠落したデータが削除され、新しいデータ フレームが生成されました。

関連記事: