非常に便利な pandas を使用してデータを時系列として処理しようとしていますが、DateTime を x-軸?私は常に、1980 年以降の秒数など、最初に浮動小数点数に変換する必要があるようです。
私はこれまで次のことを試みていましたが、奇妙なフォーマットで申し訳ありません.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 引数として、興味深いことに、Spline クラスはインターポレーターを作成しますが、より大きな 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
同じ でs(all_times)
andも使用しようとしました。s(all_times.to_pydatetime())
TypeError: array cannot be safely cast to required type
悲しいことに、私は正しいですか?誰もが時間を浮動小数点数に変換することに慣れすぎて、これらの補間が自動的に機能することを誰も考えなかったのでしょうか? (私は最終的に貢献する非常に有用なプロジェクトを見つけたでしょう..)または、私が間違っていることを証明して、いくつかのSOポイントを獲得したいですか? ;)
編集: 警告: 補間ルーチンに渡す前に、パンダ データの NaN を確認してください。彼らは何も文句を言わず、黙って失敗します。