2015-11-13 63 views
3

我想使用插值函數,但只能在pandas DataFrame列中的已知數據值之間。問題是,在列的第一個和最後一個值往往楠有時也可以是多行前的數值是楠:熊貓:插值列中的第一個和最後一個數據點是NaN

 col 1 col 2 
0 NaN  NaN 
1 NaN  NaN 
... 
1000 1  NaN 
1001 NaN  1 <----- 
1002 3  NaN <----- only want to fill in these 'in between value' rows 
1003 4  3 
... 
3999 NaN  NaN 
4000 NaN  NaN 

我綁在一起,這是「事件」更新的數據集,但分別爲每列,並通過時間戳索引。這意味着通常有一些行沒有記錄某些列的數據,因此有很多NaN!

+0

你可以發佈「捆綁在一起的數據集」的代碼和數據嗎? – WoodChopper

+0

ummm數據相當大,但如果可以的話,我會添加一個snippit ...我使用一個簡單的pd.concat連接在一起,這個pd.concat填充NaN,其中數據不記錄在任何一個數據框中的相同索引正在被連接:pdDataFrame_ToAppend = pd.concat([pdDataFrame_ToAppend,tempData],join ='outer') – HStro

回答

1

我通過功能idxminidxmax,並用方法前進填充使用功能fillna選擇通過柱的minmax值。

print df 
#  col 1 col 2 
#0  NaN NaN 
#1  NaN NaN 
#1000  1 NaN 
#1001 NaN  1 
#1002  3 NaN 
#1003  4  3 
#3999 NaN NaN 
#4000 NaN NaN 

df.loc[df['col 1'].idxmin(): df['col 1'].idxmax()] = df.loc[df['col 1'].idxmin(): df['col 1'].idxmax()].fillna(method='ffill') 
df.loc[df['col 2'].idxmin(): df['col 2'].idxmax()] = df.loc[df['col 2'].idxmin(): df['col 2'].idxmax()].fillna(method='ffill') 
print df 
#  col 1 col 2 
#0  NaN NaN 
#1  NaN NaN 
#1000  1 NaN 
#1001  1  1 
#1002  3  1 
#1003  4  3 
#3999 NaN NaN 
#4000 NaN NaN 

添加了不同的解決方案,謝謝HStro

df['col 1'].loc[df['col 1'].first_valid_index() : df['col 1'].last_valid_index()] = df['col 1'].loc[df['col 1'].first_valid_index(): df['col 1'].last_valid_index()].astype(float).interpolate() 
+0

看起來很酷。你知道你是否可以用相同的方式使用插值? – HStro

+0

你可以嘗試'apply(pandas.Series.interpolate)'而不是'fillna'。 – jezrael

+0

好的,我打算給你一個去,讓你知道,歡呼的幫助! – HStro

相關問題