Pandas は NaN で列をドロップする
Suraj Joshi
2023年1月30日
-
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
値を持つすべての行を削除します。
著者: 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 内の重複行を検索する