欠損値の取り扱い
1. NaN を含むデータフレームの例
NaN は np.nan として入力する。
import numpy as np
import pandas as pd
df = pd.DataFrame({
'a': [1, 2, 3, 4, 5],
'b': [1.2, np.nan, 5.6, 7.8, 9.0],
'c': ['a', 'b', 'c', 'd', 'e']
})
df
a | b | c | |
---|---|---|---|
0 | 1 | 1.2 | a |
1 | 2 | NaN | b |
2 | 3 | 5.6 | c |
3 | 4 | 7.8 | d |
4 | 5 | 9.0 | e |
2. 欠損値を取り除く .dropna
1 つでも欠損値のある行は,1 行全部を削除する。
dropna(axis: 'Axis' = 0, how: 'str' = 'any', thresh=None,
subset=None, inplace: 'bool' = False)
df.dropna()
a | b | c | |
---|---|---|---|
0 | 1 | 1.2 | a |
2 | 3 | 5.6 | c |
3 | 4 | 7.8 | d |
4 | 5 | 9.0 | e |
3. 欠損値を特定の値に置き換える
3.1. fillna
欠損値を value
で指定する値に置き換える。
fillna(value: 'object | ArrayLike | None' = None,
method: 'FillnaOptions | None' = None,
axis: 'Axis | None' = None, inplace: 'bool' = False,
limit=None, downcast=None)`
df.fillna(99999)
a | b | c | |
---|---|---|---|
0 | 1 | 1.2 | a |
1 | 2 | 99999.0 | b |
2 | 3 | 5.6 | c |
3 | 4 | 7.8 | d |
4 | 5 | 9.0 | e |
3.2. bfill
欠損値を直後の非欠損値で置き換える。
fillna
で method='bfill'
を指定するのと同じ。
bfill(axis: 'None | Axis' = None, inplace: 'bool' = False,
limit: 'None | int' = None, downcast=None)
df.bfill()
a | b | c | |
---|---|---|---|
0 | 1 | 1.2 | a |
1 | 2 | 5.6 | b |
2 | 3 | 5.6 | c |
3 | 4 | 7.8 | d |
4 | 5 | 9.0 | e |
df.fillna(method='bfill') # df.bifill() と同じ
a | b | c | |
---|---|---|---|
0 | 1 | 1.2 | a |
1 | 2 | 5.6 | b |
2 | 3 | 5.6 | c |
3 | 4 | 7.8 | d |
4 | 5 | 9.0 | e |
3.3. ffill
欠損値を直前の非欠損値で置き換える。
fillna
で method='ffill'
を指定するのと同じ。
ffill(axis: 'None | Axis' = None, inplace: 'bool' = False,
limit: 'None | int' = None, downcast=None)
df.ffill()
a | b | c | |
---|---|---|---|
0 | 1 | 1.2 | a |
1 | 2 | 1.2 | b |
2 | 3 | 5.6 | c |
3 | 4 | 7.8 | d |
4 | 5 | 9.0 | e |
df.fillna(method='ffill') # df.ffill() と同じ
a | b | c | |
---|---|---|---|
0 | 1 | 1.2 | a |
1 | 2 | 1.2 | b |
2 | 3 | 5.6 | c |
3 | 4 | 7.8 | d |
4 | 5 | 9.0 | e |
4. もっと知りたい人
help(df.dropna) # Help on method dropna in module pandas.core.frame
help(df.fillna) # Help on method fillna in module pandas.core.frame
help(df.bfill) # Help on method bfill in module pandas.core.frame
help(df.ffill) # Help on method ffill in module pandas.core.frame