[英]pandas dataframe interpolate
因此,我發現有一種方法可以對熊貓系列對象進行插值: http://pandas.pydata.org/pandas-docs/dev/genic/pandas.Series.interpolate.html 。 是否有等效的數據框方法? 我想對每一列進行插值。
我只是在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
通常,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/genic/pandas.Series.interpolate.html
建立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
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.