非常に便利なパンダを使用してデータを時系列で扱うと、DateTimeを持つデータに直接(スプラインなどで)補間できるライブラリが存在しないように見えますx軸?私はいつも最初に何か浮動小数点数に変換するように強制されているようです、1980年以降の秒のようなものか、そういうものです。x軸上で時間とともに動作するPythonスプラインまたは他の補間?
私はこれまでのところ、奇妙なフォーマットのため申し訳ありませんが、私はipythonのノートにこのようなものを持っている、と私はそこからセルをコピーすることはできません、次のことをしようとしていた。
from scipy.interpolate import InterpolatedUnivariateSpline as IUS
type(bb2temp): pandas.core.series.TimeSeries
s = IUS(bb2temp.index.to_pydatetime(), bb2temp, k=1)
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-67-19c6b8883073> in <module>()
----> 1 s = IUS(bb2temp.index.to_pydatetime(), bb2temp, k=1)
/Library/Frameworks/EPD64.framework/Versions/7.3/lib/python2.7/site-packages/scipy/interpolate/fitpack2.py in __init__(self, x, y, w, bbox, k)
335 #_data == x,y,w,xb,xe,k,s,n,t,c,fp,fpint,nrdata,ier
336 self._data = dfitpack.fpcurf0(x,y,k,w=w,
--> 337 xb=bbox[0],xe=bbox[1],s=0)
338 self._reset_class()
339
TypeError: float() argument must be a string or a number
bb2temp.index.values
を使用することにより(それは、これらのようになります。
array([1970-01-15 184:00:35.884999, 1970-01-15 184:00:58.668999,
1970-01-15 184:01:22.989999, 1970-01-15 184:01:45.774000,
1970-01-15 184:02:10.095000, 1970-01-15 184:02:32.878999,
1970-01-15 184:02:57.200000, 1970-01-15 184:03:19.984000,
)のx引数として、興味深いことに、スプラインクラスは、インターポレータを作成していますが、補間しようとしたとき、それはまだ壊れ/ここに私の最終的な目標である大きなDateTimeIndex()に外挿し。ここではそれがどのように見えるかです:
all_times = divcal.timed.index.levels[2] # part of a MultiIndex
all_times
<class 'pandas.tseries.index.DatetimeIndex'>
[2009-07-20 00:00:00.045000, ..., 2009-07-20 00:30:00.018000]
Length: 14063, Freq: None, Timezone: None
s(all_times.values) # applying the above generated interpolator
---------------------------------------------------------------------------
TypeError Traceback (most recent call last)
<ipython-input-74-ff11f6d6d7da> in <module>()
----> 1 s(tall.values)
/Library/Frameworks/EPD64.framework/Versions/7.3/lib/python2.7/site-packages/scipy/interpolate/fitpack2.py in __call__(self, x, nu)
219 # return dfitpack.splev(*(self._eval_args+(x,)))
220 # return dfitpack.splder(nu=nu,*(self._eval_args+(x,)))
--> 221 return fitpack.splev(x, self._eval_args, der=nu)
222
223 def get_knots(self):
/Library/Frameworks/EPD64.framework/Versions/7.3/lib/python2.7/site-packages/scipy/interpolate/fitpack.py in splev(x, tck, der, ext)
546
547 x = myasarray(x)
--> 548 y, ier =_fitpack._spl_(x, der, t, c, k, ext)
549 if ier == 10:
550 raise ValueError("Invalid input data")
TypeError: array cannot be safely cast to required type
私は同じTypeError: array cannot be safely cast to required type
で、同様s(all_times)
とs(all_times.to_pydatetime())
を使用しようとしました。
私は、幸いにも、正しいですか?誰もが時間を浮動小数点に変換するのに慣れていたのですが、これらの補間は自動的に機能するはずです。 (私は最終的に貢献するために非常に有用なプロジェクトを発見したでしょう)またはあなたは私が間違っていることを証明し、いくつかのSOポイントを獲得したいですか? ;)
編集:警告:補間ルーチンに渡す前に、pandasデータでNaNを確認してください。彼らは何にも不平を言うことはありませんが、ただ静かに失敗します。
私はそれが簡単でなければならないと思っていた、ありがとう!しかし、私は、高レベルのscipy補間ルーチンへのパッチが私のためにそれを行うことができると正しく仮定していますか? –
もちろん、パッチがそれをするでしょう。しかし、まだ私には残酷なようです。 'array.dtype == 'datetime64'のような単純なものかもしれません:array = array.astype( 'd')'、そしてその逆の出力です。 – tiago
私は彼らがとにかくそれをしないと困惑している理由です;)あなたが仕事をしていない場合、なぜ高級クラスをフィッティングパックの上に導入するのですか? splrepとInterpolatedUnivariateSplineの間のステップの多くは、単純な1つまたは2つのライナーでした。合計で、彼らは数えます。 –