Pandas DataFrame DataFrame.interpolate() 関数

Suraj Joshi 2023年1月30日
  1. pandas.DataFrame.interpolate() の構文
  2. コード例:DataFrame.interpolate() メソッドを用いて DataFrame 内のすべての NaN 値を補間する
  3. コード例:DataFrame.interpolate() メソッド method パラメータを持つメソッド
  4. コード例:Pandas DataFrame.interpolate() メソッド axis パラメータを用いて row 軸に沿って補間する
  5. コード例:DataFrame.interpolate() メソッド with limit パラメータ
  6. コード例:DataFrame.interpolate() メソッド with limit_direction パラメータ
  7. 時系列データを DataFrame.interpolate() メソッドで補間する
Pandas DataFrame DataFrame.interpolate() 関数

Python Pandas DataFrame.interpolate() 関数は補間手法を用いて DataFrame 内の NaN の値を補間します。

pandas.DataFrame.interpolate() の構文

DataFrame.interpolate(
    method="linear",
    axis=0,
    limit=None,
    inplace=False,
    limit_direction="forward",
    limit_area=None,
    downcast=None,
    **kwargs
)

パラメータ

method lineartimeindexvaluesnearestzeroslinearquadraticcubicbarycentrickroghpolynomialsplinepiecewise_polynomialfrom_derivativespchipakimaNone. NaN の値を補間するためのメソッド。
axis 行(axis=0)または列(axis=1)に沿って欠損値を補間します。
limit 整数。補間される連続した NaN の最大数。
inplace 論理値。True ならば、呼び出し元の DataFrame を変更します。
limit_direction forwardbackward、または bothlimit が指定された場合、NaNs に沿った方向は補間されます。
limit_area Noneinsideoutsidelimit が指定された場合の補間の制限
downcast 辞書。データ型のダウンキャストを指定します。
**kwargs 補間関数のキーワード引数。

戻り値

inplaceTrue の場合、与えられた method を用いてすべての NaN 値を補間する DataFrame を作成し、そうでない場合は None を作成します。

コード例:DataFrame.interpolate() メソッドを用いて DataFrame 内のすべての NaN 値を補間する

import pandas as pd

df = pd.DataFrame({'X': [1, 2, 3, None, 3],
                   'Y': [4, None, 8, None, 3]})
print("DataFrame:")
print(df)

filled_df = df.interpolate()

print("Interploated DataFrame:")
print(filled_df)

出力:

DataFrame:
     X    Y
0  1.0  4.0
1  2.0  NaN
2  3.0  8.0
3  NaN  NaN
4  3.0  3.0
Interploated DataFrame:
     X    Y
0  1.0  4.0
1  2.0  6.0
2  3.0  8.0
3  3.0  5.5
4  3.0  3.0

これは DataFrame のすべての NaN 値を linear 補間手法を用いて補間します。

このメソッドは pandas.DataFrame.fillna() に比べてよりインテリジェントです。

コード例:DataFrame.interpolate() メソッド method パラメータを持つメソッド

また、DataFrame.interpolate() 関数の method パラメータの値を設定することで、DataFrameNaN 値をさまざまな補間手法で補間することもできます。

import pandas as pd

df = pd.DataFrame({'X': [1, 2, 3, None, 3],
                   'Y': [4, None, 8, None, 3]})
print("DataFrame:")
print(df)

filled_df = df.interpolate(method='polynomial', order=2)

print("Interploated DataFrame:")
print(filled_df)

出力:

DataFrame:
     X    Y
0  1.0  4.0
1  2.0  NaN
2  3.0  8.0
3  NaN  NaN
4  3.0  3.0
Interploated DataFrame:
          X      Y
0  1.000000  4.000
1  2.000000  7.125
2  3.000000  8.000
3  3.368421  6.625
4  3.000000  3.000

このメソッドは DataFrameNaN のすべての値を 2 次の polynomial 補間手法を用いて補間します。

ここで、order=2polynomial 関数のキーワード引数です。

コード例:Pandas DataFrame.interpolate() メソッド axis パラメータを用いて row 軸に沿って補間する

import pandas as pd

df = pd.DataFrame({'X': [1, 2, 3, None, 3],
                   'Y': [4, None, 8, None, 3]})
print("DataFrame:")
print(df)

filled_df = df.interpolate(axis=1)

print("Interploated DataFrame:")
print(filled_df)

出力:

DataFrame:
     X    Y
0  1.0  4.0
1  2.0  NaN
2  3.0  8.0
3  NaN  NaN
4  3.0  3.0
Interploated DataFrame:
     X    Y
0  1.0  4.0
1  2.0  2.0
2  3.0  8.0
3  NaN  NaN
4  3.0  3.0

ここでは、行軸に沿って NaN の値を補間するために axis=1 を設定しています。2 行目では、2 行目に沿った線形補間で NaN の値を置き換えています。

しかし、4 行目では、4 行目の値はいずれも NaN であるため、補間後も NaN の値が残っています。

コード例:DataFrame.interpolate() メソッド with limit パラメータ

DataFrame.interpolate() メソッドの limit パラメータは、このメソッドで塗りつぶされる NaN 値の最大連続数を制限します。

import pandas as pd

df = pd.DataFrame({'X': [1, 2, 3, None, 3],
                   'Y': [4, None, None, None, 3]})
print("DataFrame:")
print(df)

filled_df = df.interpolate( limit = 1)

print("Interploated DataFrame:")
print(filled_df)

出力:

DataFrame:
     X    Y
0  1.0  4.0
1  2.0  NaN
2  3.0  NaN
3  NaN  NaN
4  3.0  3.0
Interploated DataFrame:
     X     Y
0  1.0  4.00
1  2.0  3.75
2  3.0   NaN
3  3.0   NaN
4  3.0  3.00

ここでは、ある列で上から順に NaN が塗りつぶされると、同じ列の次の連続する NaN の値は変更されません。

コード例:DataFrame.interpolate() メソッド with limit_direction パラメータ

DataFrame.interpolate() メソッドの limit-direction パラメータは、値を補間する特定の axis に沿った方向を制御します。

import pandas as pd

df = pd.DataFrame({'X': [1, 2, 3, None, 3],
                   'Y': [4, None, None, None, 3]})
print("DataFrame:")
print(df)

filled_df = df.interpolate(limit_direction ='backward', limit = 1)

print("Interploated DataFrame:")
print(filled_df)

出力:

DataFrame:
     X    Y
0  1.0  4.0
1  2.0  NaN
2  3.0  NaN
3  NaN  NaN
4  3.0  3.0
Interploated DataFrame:
     X     Y
0  1.0  4.00
1  2.0   NaN
2  3.0   NaN
3  3.0  3.25
4  3.0  3.00

ここでは、一旦 NaN が下から順に列に埋められると、同じ列の次の連続する NaN の値は変更されません。

時系列データを DataFrame.interpolate() メソッドで補間する

import pandas as pd

dates=['April-10', 'April-11', 'April-12', 'April-13']
fruits=['Apple', 'Papaya', 'Banana', 'Mango']
prices=[3, None, 2, 4]

df = pd.DataFrame({'Date':dates ,
                   'Fruit':fruits ,
                   'Price': prices})

print(df)
df.interpolate(inplace=True)

print("Interploated DataFrame:")
print(df)

出力:

       Date   Fruit  Price
0  April-10   Apple    3.0
1  April-11  Papaya    NaN
2  April-12  Banana    2.0
3  April-13   Mango    4.0
Interploated DataFrame:
       Date   Fruit  Price
0  April-10   Apple    3.0
1  April-11  Papaya    2.5
2  April-12  Banana    2.0
3  April-13   Mango    4.0

inplace=True のため、関数 interpolate() を呼び出した後に元の DataFrame が変更されます。

著者: Suraj Joshi
Suraj Joshi avatar Suraj Joshi avatar

Suraj Joshi is a backend software engineer at Matrice.ai.

LinkedIn

関連記事 - Pandas DataFrame