我想使用三次樣條填充DataFrame中一列中的空位。如果我要導出到列表,那麼我可以使用numpy的interp1d
函數並將其應用於缺失的值。使用三次樣條在Pandas中插值時間序列
有沒有辦法在熊貓裏面使用這個函數?
我想使用三次樣條填充DataFrame中一列中的空位。如果我要導出到列表,那麼我可以使用numpy的interp1d
函數並將其應用於缺失的值。使用三次樣條在Pandas中插值時間序列
有沒有辦法在熊貓裏面使用這個函數?
大多數numpy/scipy函數只需要參數爲「array_like」,iterp1d
也不例外。幸運的串聯和數據幀都「array_like」所以我們並不需要離開大熊貓:
import pandas as pd
import numpy as np
from scipy.interpolate import interp1d
df = pd.DataFrame([np.arange(1, 6), [1, 8, 27, np.nan, 125]]).T
In [5]: df
Out[5]:
0 1
0 1 1
1 2 8
2 3 27
3 4 NaN
4 5 125
df2 = df.dropna() # interpolate on the non nan
f = interp1d(df2[0], df2[1], kind='cubic')
#f(4) == array(63.9999999999992)
df[1] = df[0].apply(f)
In [10]: df
Out[10]:
0 1
0 1 1
1 2 8
2 3 27
3 4 64
4 5 125
注:我不認爲把我的頭頂部的例子在一個數據幀進入通第二個參數(y
)...但這也應該工作。
啊。我懂了。如果你的interp1d函數中的X值是數據框索引值,你會怎麼做? – user1911866
你可以設置'x = df.index',然後設置'pd.Series(f(x),index = x)'。 :) –
好的謝謝你的幫助!而我希望的最後一件事。我有多個包含NaN數據的列。解決df.dropna()會丟失太多的行。你如何將它應用到一列(即'data1') – user1911866
我很驚訝你接受這麼快的答案(沒有冒犯,海頓;)因爲我以爲你特別想插入時間序列,但我想你並不是完全意味着pandas.TimeSeries。我目前對這些話題也很感興趣。請參閱http://stackoverflow.com/questions/13941472/python-splines-or-other-interpolations-that-work-with-time-on-x-axis/13941980#comment19225878_13941980 –