欠損値とは
欠損値とは、データセット内の特定の要素が不足している、または存在しない状態を指します。これは、データ収集中に情報が失われたり、特定の情報が収集されなかった場合に発生します。
データ分析において、欠損値は重要な問題となります。欠損値を無視してしまうと、データ分析の結果が歪んだり、誤った結論を導く可能性があります。そのため、欠損値の適切な取り扱いは、データ分析の品質を保つために重要です。
Pandasでは、欠損値は通常 NaN
(Not a Number) として表現されます。これは、数値データだけでなく、文字列や日付などの非数値データに対しても使用されます。Pandasの isnull()
メソッドを使用すると、データフレーム内の欠損値を簡単に見つけることができます。また、 fillna()
メソッドを使用すると、欠損値を他の値で置換することができます。これらのメソッドを適切に使用することで、欠損値の問題を効果的に解決することができます。
PandasにおけるNaN扱いになる要素
Pandasでは、欠損値は通常 NaN
(Not a Number) として表現されます。NaN
は浮動小数点数型の特殊な値で、数値データだけでなく、文字列や日付などの非数値データに対しても使用されます。
以下に、Pandasで NaN
として扱われる主な要素をいくつか示します。
- None: Pythonの
None
オブジェクトは、PandasではNaN
として扱われます。
import pandas as pd
s = pd.Series([1, 2, None])
print(s)
このコードは以下のように出力されます。
0 1.0
1 2.0
2 NaN
dtype: float64
- 欠損値を含む計算: 欠損値を含む計算結果は
NaN
となります。
import numpy as np
s = pd.Series([1, 2, np.nan])
print(s.sum())
このコードは 3.0
と出力されます。NaN
は計算に影響を与えず、無視されます。
- 不適切な型変換: 不適切な型変換が行われた場合、Pandasは
NaN
を返します。
s = pd.Series(['1', '2', 'three']).astype(float)
print(s)
このコードは以下のように出力されます。
0 1.0
1 2.0
2 NaN
dtype: float64
以上のように、Pandasでは様々な状況で NaN
が用いられます。これらの NaN
の扱い方を理解することは、データ分析において重要です。
fillnaメソッドの基本的な使い方
Pandasの fillna()
メソッドは、データフレーム内の NaN
値を指定した値で置換するためのメソッドです。以下にその基本的な使い方を示します。
import pandas as pd
import numpy as np
# データフレームの作成
df = pd.DataFrame({
'A': [1, 2, np.nan],
'B': [5, np.nan, np.nan],
'C': [1, 2, 3]
})
print(df)
このコードは以下のようなデータフレームを出力します。
A B C
0 1.0 5.0 1
1 2.0 NaN 2
2 NaN NaN 3
fillna()
メソッドを使用して、すべての NaN
値を 0
で置換するには以下のようにします。
df.fillna(0)
これにより、以下のようなデータフレームが得られます。
A B C
0 1.0 5.0 1
1 2.0 0.0 2
2 0.0 0.0 3
このように、fillna()
メソッドは、欠損値を簡単に他の値で置換することができます。ただし、この操作は元のデータフレームを変更しないため、結果を保存するには新しい変数に代入するか、 inplace=True
を指定する必要があります。
すべての値を同じ値に置換する方法
Pandasの fillna()
メソッドを使用すると、データフレーム内のすべての NaN
値を同じ値で置換することができます。以下にその方法を示します。
import pandas as pd
import numpy as np
# データフレームの作成
df = pd.DataFrame({
'A': [1, 2, np.nan],
'B': [5, np.nan, np.nan],
'C': [1, 2, 3]
})
print(df)
このコードは以下のようなデータフレームを出力します。
A B C
0 1.0 5.0 1
1 2.0 NaN 2
2 NaN NaN 3
すべての NaN
値を 0
で置換するには、以下のように fillna()
メソッドに置換したい値を引数として渡します。
df.fillna(0)
これにより、以下のようなデータフレームが得られます。
A B C
0 1.0 5.0 1
1 2.0 0.0 2
2 0.0 0.0 3
このように、fillna()
メソッドを使用すると、データフレーム内のすべての NaN
値を一度に同じ値で置換することができます。ただし、この操作は元のデータフレームを変更しないため、結果を保存するには新しい変数に代入するか、 inplace=True
を指定する必要があります。
列ごとに代表値を計算して置換する方法
Pandasの fillna()
メソッドを使用すると、データフレーム内の NaN
値を列ごとの代表値(平均値、中央値など)で置換することができます。以下にその方法を示します。
import pandas as pd
import numpy as np
# データフレームの作成
df = pd.DataFrame({
'A': [1, 2, np.nan],
'B': [5, np.nan, np.nan],
'C': [1, 2, 3]
})
print(df)
このコードは以下のようなデータフレームを出力します。
A B C
0 1.0 5.0 1
1 2.0 NaN 2
2 NaN NaN 3
すべての NaN
値をその列の平均値で置換するには、以下のように fillna()
メソッドに mean()
メソッドを適用します。
df.fillna(df.mean())
これにより、以下のようなデータフレームが得られます。
A B C
0 1.0 5.0 1
1 2.0 5.0 2
2 1.5 5.0 3
このように、fillna()
メソッドを使用すると、データフレーム内の NaN
値を列ごとの代表値で置換することができます。ただし、この操作は元のデータフレームを変更しないため、結果を保存するには新しい変数に代入するか、 inplace=True
を指定する必要があります。
特定の要素で特定の値に置換する方法
Pandasの replace()
メソッドを使用すると、データフレーム内の特定の要素を別の値で置換することができます。以下にその方法を示します。
import pandas as pd
# データフレームの作成
df = pd.DataFrame({
'A': [1, 2, 'bad'],
'B': [5, 'bad', 'bad'],
'C': [1, 2, 3]
})
print(df)
このコードは以下のようなデータフレームを出力します。
A B C
0 1 5 1
1 2 bad 2
2 bad bad 3
すべての 'bad'
値を 'good'
で置換するには、以下のように replace()
メソッドに置換したい値と新しい値を引数として渡します。
df.replace('bad', 'good')
これにより、以下のようなデータフレームが得られます。
A B C
0 1 5 1
1 2 good 2
2 good good 3
このように、replace()
メソッドを使用すると、データフレーム内の特定の要素を一度に別の値で置換することができます。ただし、この操作は元のデータフレームを変更しないため、結果を保存するには新しい変数に代入するか、 inplace=True
を指定する必要があります。