Magicode logo
Magicode
0
1 min read

Python(pandas) で NaN (欠損値)を前後の値から置換(穴埋めする)

サマリー

pandas の interpolate() を使うと NaN (欠損値) を前後の値を使って穴埋めすることができます。 https://pandas.pydata.org/pandas-docs/stable/reference/api/pandas.DataFrame.interpolate.html

以下のデータを使っていきます。

import numpy as np
import pandas as pd

df = pd.DataFrame({'col_1': [0, 1, 2, np.nan,4, np.nan, np.nan, 5],
                   'col_2': ['foo', np.nan,'bar', 'val', 'foo', np.nan,'bar', 'val'],})
df

col_1 col_2
0 0.0 foo
1 1.0 NaN
2 2.0 bar
3 NaN val
4 4.0 foo
5 NaN NaN
6 NaN bar
7 5.0 val

interpolate() で穴埋めします。

df.interpolate()

col_1 col_2
0 0.000000 foo
1 1.000000 NaN
2 2.000000 bar
3 3.000000 val
4 4.000000 foo
5 4.333333 NaN
6 4.666667 bar
7 5.000000 val

数値が前後の値から穴埋めされているのがわかるかと思います。
(文字列は NaN のままです。)
また、デフォルトでは、引数 : method='linear' ですので線形補間されています。

前(上)の値 or 後ろ(下)の値で穴埋めしたい場合は引数に ffill , bfill を指定します。

df.interpolate('ffill')

col_1 col_2
0 0.0 foo
1 1.0 foo
2 2.0 bar
3 2.0 val
4 4.0 foo
5 4.0 foo
6 4.0 bar
7 5.0 val
df.interpolate('bfill')

前(上)の値 or 後ろ(下)の値で穴埋めしたい場合は引数に ffill , bfill を指定します。

Discussion

コメントにはログインが必要です。