将NaN值插值到DataFrame上作为环

时间:2019-06-13 08:27:08

标签: python pandas numpy

我需要在NaN上插值Dataframe,但是我希望该插值能得到DataFrame的第一个值,以防NaN值是最后一个值。这是一个示例:

import pandas as pd
import numpy as np
df = pd.DataFrame.from_dict({"a": [1,2,3], "b":[1,2,np.nan]})

因此DataFrame是:

   a    b
0  1  1.0
1  2  2.0
2  3  NaN

但是当我对nan值进行插值时:

df.interpolate(method="linear", inplace=True)

我知道了

   a    b
0  1  1.0
1  2  2.0
2  3  2.0

插值不使用第一个值来执行。由于圆弧插补,我希望输出的数值为1.5。

1 个答案:

答案 0 :(得分:2)

一个可能的解决方案是添加第一行,内插并删除最后一行:

df = df.append(df.iloc[0]).interpolate(method="linear").iloc[:-1]
print (df)
     a    b
0  1.0  1.0
1  2.0  2.0
2  3.0  1.5

编辑:

更多一般解决方案:

df = pd.DataFrame.from_dict({"a": [1,2,3,4], "b":[np.nan,1,2,np.nan]})

df = pd.concat([df] * 3).interpolate(method="linear").iloc[len(df):-len(df)]

print (df)
   a         b
0  1  1.333333
1  2  1.000000
2  3  2.000000
3  4  1.666667

或者仅需要处理最后一个不丢失的值:

df = pd.DataFrame.from_dict({"a": [1,2,3,4], "b":[np.nan,1,2,np.nan]})

df1 = df.ffill().iloc[[-1]]
df2 = df.bfill().iloc[[0]]
df = pd.concat([df1, df, df2]).interpolate(method="linear").iloc[1:-1]

print (df)
   a    b
0  1  1.5
1  2  1.0
2  3  2.0
3  4  1.5