簡體   English   中英

熊貓數據幀插值

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM