pandas dataframe interpolate

时间:2013-11-27 20:22:29

标签: pandas dataframe

所以我看到有一种方法可以为pandas系列对象http://pandas.pydata.org/pandas-docs/dev/generated/pandas.Series.interpolate.html进行插值。是否存在数据帧的等效方法?我想插入每一列。

3 个答案:

答案 0 :(得分:3)

我只是在pandas 0.13中试过它,它的确有效:

a = Series([0,nan,1,2])
b = DataFrame([a,a,a,a])

b
     0    1  2   3
0    0  NaN  1   2
1    0  NaN  1   2
2    0  NaN  1   2
3    0  NaN  1   2


b.interpolate(axis=1)

     0     1     2   3
0    0   0.5     1   2
1    0   0.5     1   2
2    0   0.5     1   2
3    0   0.5     1   2

答案 1 :(得分:2)

pandas DataFrame中通常不同的列包含不同类型的信息,因此插值方法可能不适用,或者根据数据可能需要不同的方法。

使用名为data的DataFrame,包含'TimeStamp','Lat','Lon','Value'列。您可以通过执行以下操作来插入每列的NaN值:

data.TimeStamp = data.TimeStamp.interpolate(method = 'time')
data.Lat = data.Lat.interpolate(method = 'spline')
data.Long = data.Long.interpolate(method = 'spline')
data.Value = data.Value.interpolate(method = 'linear')

如果您所有列中的数据都是同类的,我想您可以为所有列调用相同的方法。

有关插值函数的更多信息: http://pandas.pydata.org/pandas-docs/dev/generated/pandas.Series.interpolate.html

答案 2 :(得分:0)

建立关闭MonkeyButters有用的答案,如果你想只插入一个列,这是有效的。虽然有点间接:

#create a dataframe with some missing values
np.random.seed(123)
df = pd.DataFrame({    
    'a':[1,2,np.nan,4,np.nan,6,np.nan,7,8],
    'b':np.random.randn(9)    
    })

收率:

a   b
0   1.0 -1.085631
1   2.0 0.997345
2   NaN 0.282978
3   4.0 -1.506295
4   NaN -0.578600
5   6.0 1.651437
6   NaN -2.426679
7   7.0 -0.428913
8   8.0 1.265936

创建一个系列,然后回写到DataFrame:

se = df['a'].interpolate()
df['a'] = se.values

a   b
0   1.0 -1.085631
1   2.0 0.997345
2   3.0 0.282978
3   4.0 -1.506295
4   5.0 -0.578600
5   6.0 1.651437
6   6.5 -2.426679
7   7.0 -0.428913
8   8.0 1.265936