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