Ccmmutty logo
Commutty IT
1 min read

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

https://cdn.magicode.io/media/notebox/f5fc2d51-3f3e-4568-a91a-f73c4bb76cf3.jpeg

サマリー

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

以下のデータを使っていきます。
python
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() で穴埋めします。
python
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 を指定します。
python
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
python
df.interpolate('bfill')
前(上)の値 or 後ろ(下)の値で穴埋めしたい場合は引数に ffill , bfill を指定します。

Discussion

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