Pandas DataFrame の列ですべての NaN 値をゼロに置き換える方法

Ahmed Waheed 2023年1月30日
  1. すべての NaN 値をゼロに置き換える df.fillna() メソッド
  2. df.replace() メソッド
Pandas DataFrame の列ですべての NaN 値をゼロに置き換える方法

大きなデータセットを扱う場合、データセットに平均値または適切な値で置き換えたい NaN 値がある場合があります。たとえば、学生の採点リストがあり、一部の学生がクイズを試みなかったため、システムは 0.0 ではなく NaN を自動的に入力しました。このタスクを達成するためのさまざまな方法を以下に示します。

  1. df.fillna()
  2. df.replace()

次のセクションでは、次のように同じ DataFrame を使用します。

import pandas as pd
import numpy as np

data = {
    "name": ["Oliver", "Harry", "George", "Noah"],
    "percentage": [90, 99, 50, 65],
    "grade": [88, np.nan, 95, np.nan],
}
df = pd.DataFrame(data)
print(df)

以下は、グレードが NaN の DataFrame です。

     name  percentage  grade
0  Oliver          90   88.0
1   Harry          99    NaN
2  George          50   95.0
3    Noah          65    NaN

すべての NaN 値をゼロに置き換える df.fillna() メソッド

NaN の値を df.fillna() メソッドを使って置き換えましょう。

import pandas as pd
import numpy as np

data = {
    "name": ["Oliver", "Harry", "George", "Noah"],
    "percentage": [90, 99, 50, 65],
    "grade": [88, np.nan, 95, np.nan],
}
df = pd.DataFrame(data)
df = df.fillna(0)
print(df)

以下は、NaN をゼロに置き換えた出力です。

     name  percentage  grade
0  Oliver          90   88.0
1   Harry          99    0.0
2  George          50   95.0
3    Noah          65    0.0

df.fillna() メソッドは、NaN 値を指定された値で埋めます。オブジェクトデータは変更されませんが、inplace パラメータが True に設定されていない限り、デフォルトで新しい DataFrame を返します。

上記のコードを、inplace パラメーターを有効にして True に書き換えることができます。

import pandas as pd
import numpy as np

data = {
    "name": ["Oliver", "Harry", "George", "Noah"],
    "percentage": [90, 99, 50, 65],
    "grade": [88, np.nan, 95, np.nan],
}
df = pd.DataFrame(data)
df.fillna(0, inplace=True)
print(df)

df.replace() メソッド

このメソッドは、NaN を 0 に置き換えるために df.fillna() と同じように機能します。df.replace() は他の数値を置き換えるためにも使用できます。コードを見てみましょう。

import pandas as pd
import numpy as np

data = {
    "name": ["Oliver", "Harry", "George", "Noah"],
    "percentage": [90, 99, 50, 65],
    "grade": [88, np.nan, 95, np.nan],
}
df = pd.DataFrame(data)
nan_replaced = df.replace(np.nan, 0)
print(nan_replaced)

出力:

     name  percentage  grade
0  Oliver          90   88.0
1   Harry          99    0.0
2  George          50   95.0
3    Noah          65    0.0

関連記事 - Pandas NaN