Pandas は NaN で列をドロップする
    
    Suraj Joshi
    2023年1月30日
    
    Pandas
    Pandas DataFrame Row
    Pandas NaN
    
- 
          
            
DataFrame.notna()メソッドを用いた Pandas の NaN での行のドロップ - 
          
            Pandas は 
DataFrame.dropna()メソッドを使ってすべてのカラムに対してNaN値を持つ行のみをドロップする - 
          
            Pandas は特定のカラムの値が 
NaNの場合のみ行をドロップするDataFrame.dropna()メソッドを使用する - 
          
            Pandas は任意の列に対して 
NaN値を持つ行をドロップするDataFrame.dropna()メソッドを使用する 
このチュートリアルでは、DataFrame.notna() メソッドと DataFrame.dropna() メソッドを使用して、NaN 値を持つすべての行を削除する方法を説明します。
以下のサンプルコードでは、DataFrame を使用します。
import pandas as pd
roll_no = [501, 502, 503, 504, 505]
data = pd.DataFrame(
    {
        "Name": ["Alice", "Steven", "Neesham", "Chris", "Alice"],
        "Age": [19, None, 18, 21, None],
        "Income($)": [4000, 5000, None, 3500, None],
        "Expense($)": [3000, 2000, 2500, 25000, None],
    }
)
print(data)
出力:
      Name   Age  Income($)  Expense($)
0    Alice  19.0     4000.0      3000.0
1   Steven   NaN     5000.0      2000.0
2  Neesham  18.0        NaN      2500.0
3    Chris  21.0     3500.0     25000.0
4    Alice   NaN        NaN         NaN
DataFrame.notna() メソッドを用いた Pandas の NaN での行のドロップ
    
DataFrame.notna() メソッドは呼び出し元の DataFrame と同じ行数と列数のブールオブジェクトを返します。要素が NaN でない場合、ブーリアンオブジェクトの True 値にマップされ、要素が NaN の場合は False 値にマップされます。
import pandas as pd
roll_no = [501, 502, 503, 504, 505]
data = pd.DataFrame(
    {
        "Name": ["Alice", "Steven", "Neesham", "Chris", "Alice"],
        "Age": [19, None, 18, 21, None],
        "Income($)": [4000, 5000, None, 3500, None],
        "Expense($)": [3000, 2000, 2500, 25000, None],
    }
)
print("Initial DataFrame:")
print(data)
print("")
data = data[data["Income($)"].notna()]
print("DataFrame after removing rows with NaN value in Income Field:")
print(data)
出力:
Initial DataFrame:
      Name   Age  Income($)  Expense($)
0    Alice  19.0     4000.0      3000.0
1   Steven   NaN     5000.0      2000.0
2  Neesham  18.0        NaN      2500.0
3    Chris  21.0     3500.0     25000.0
4    Alice   NaN        NaN         NaN
DataFrame after removing rows with NaN value in Income Field:
     Name   Age  Income($)  Expense($)
0   Alice  19.0     4000.0      3000.0
1  Steven   NaN     5000.0      2000.0
3   Chris  21.0     3500.0     25000.0
ここでは、data の Income($) 列に notna() メソッドを適用し、列の値に応じて True または False の値を持つ直列オブジェクトを返します。ブールオブジェクトを元の DataFrame へのインデックスとして渡すと、Income($) カラムの NaN 値を持たない行のみが得られます。
Pandas は DataFrame.dropna() メソッドを使ってすべてのカラムに対して NaN 値を持つ行のみをドロップする
    
import pandas as pd
roll_no = [501, 502, 503, 504, 505]
data = pd.DataFrame(
    {
        "Id": [621, 645, 210, 345, None],
        "Age": [19, None, 18, 21, None],
        "Income($)": [4000, 5000, None, 3500, None],
        "Expense($)": [3000, 2000, 2500, 25000, None],
    }
)
print("Initial DataFrame:")
print(data)
print("")
data = data.dropna(how="all")
print("DataFrame after removing rows with NaN value in All Columns:")
print(data)
出力:
Initial DataFrame:
      Id   Age  Income($)  Expense($)
0  621.0  19.0     4000.0      3000.0
1  645.0   NaN     5000.0      2000.0
2  210.0  18.0        NaN      2500.0
3  345.0  21.0     3500.0     25000.0
4    NaN   NaN        NaN         NaN
DataFrame after removing rows with NaN value in All Columns:
      Id   Age  Income($)  Expense($)
0  621.0  19.0     4000.0      3000.0
1  645.0   NaN     5000.0      2000.0
2  210.0  18.0        NaN      2500.0
3  345.0  21.0     3500.0     25000.0
DataFrame 内の全フィールドのうち、NaN の値を持つ行のみを削除します。dropna() メソッドで how='all' を設定して、列の値がすべて NaN の場合にのみ行を削除するようにしています。
Pandas は特定のカラムの値が NaN の場合のみ行をドロップする DataFrame.dropna() メソッドを使用する
    
import pandas as pd
roll_no = [501, 502, 503, 504, 505]
data = pd.DataFrame(
    {
        "Id": [621, 645, 210, 345, None],
        "Age": [19, None, 18, 21, None],
        "Income($)": [4000, 5000, None, 3500, None],
        "Expense($)": [3000, 2000, 2500, 25000, None],
    }
)
print("Initial DataFrame:")
print(data)
print("")
data = data.dropna(subset=["Id"])
print("DataFrame after removing rows with NaN value in Id Column:")
print(data)
出力:
Initial DataFrame:
      Id   Age  Income($)  Expense($)
0  621.0  19.0     4000.0      3000.0
1  645.0   NaN     5000.0      2000.0
2  210.0  18.0        NaN      2500.0
3  345.0  21.0     3500.0     25000.0
4    NaN   NaN        NaN         NaN
DataFrame after removing rows with NaN value in Id Column:
      Id   Age  Income($)  Expense($)
0  621.0  19.0     4000.0      3000.0
1  645.0   NaN     5000.0      2000.0
2  210.0  18.0        NaN      2500.0
3  345.0  21.0     3500.0     25000.0
DataFrame 内のすべての列のうち、Id 列のみに NaN 値を持つ列を削除します。
Pandas は任意の列に対して NaN 値を持つ行をドロップする DataFrame.dropna() メソッドを使用する
    
import pandas as pd
roll_no = [501, 502, 503, 504, 505]
data = pd.DataFrame(
    {
        "Id": [621, 645, 210, 345, None],
        "Age": [19, None, 18, 21, None],
        "Income($)": [4000, 5000, None, 3500, None],
        "Expense($)": [3000, 2000, 2500, 25000, None],
    }
)
print("Initial DataFrame:")
print(data)
print("")
data = data.dropna()
print("DataFrame after removing rows with NaN value in any column:")
print(data)
出力:
Initial DataFrame:
      Id   Age  Income($)  Expense($)
0  621.0  19.0     4000.0      3000.0
1  645.0   NaN     5000.0      2000.0
2  210.0  18.0        NaN      2500.0
3  345.0  21.0     3500.0     25000.0
4    NaN   NaN        NaN         NaN
DataFrame after removing rows with NaN value in any column:
      Id   Age  Income($)  Expense($)
0  621.0  19.0     4000.0      3000.0
3  345.0  21.0     3500.0     25000.0
デフォルトでは、dropna() メソッドは少なくとも一つの NaN 値を持つすべての行を削除します。
        チュートリアルを楽しんでいますか? <a href="https://www.youtube.com/@delftstack/?sub_confirmation=1" style="color: #a94442; font-weight: bold; text-decoration: underline;">DelftStackをチャンネル登録</a> して、高品質な動画ガイドをさらに制作するためのサポートをお願いします。 Subscribe
    
著者: Suraj Joshi
    Suraj Joshi is a backend software engineer at Matrice.ai.
LinkedIn関連記事 - Pandas DataFrame Row
- Pandas DataFrame の行数を取得する方法
 - Pandas で DataFrame 行をランダムにシャッフルする方法
 - Pandas の列値に基づいて DataFrame 行をフィルタリングする方法
 - Pandas の DataFrame の行を反復する方法
 - Pandas で特定の列が所定の条件を満たすすべての行のインデックスを取得する方法
 - Pandas を使用して DataFrame 内の重複行を検索する
 
