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

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

大きなデータセットを扱う場合、データセットに平均値または適切な値で置き換えたい 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 のデータフレームです。

     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 に設定されていない限り、デフォルトで新しいデータフレームを返します。

上記のコードを、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

  • NaN が Pandas DataFrame に存在するかどうかを確認する方法
  • comments powered by Disqus