python 2.7 - Pandas Interpolate Returning NaNs -
python 2.7 - Pandas Interpolate Returning NaNs -
i'm trying basic interpolation of position info @ 60hz (~16ms) intervals. when seek utilize pandas 0.14 interpolation on dataframe, tells me have nans in info set (not true). when seek run on individual series pulled dataframe, returns same series without nans filled in. i've tried setting indices integers, using different methods, fiddling axis , limit parameters of interpolation function - no dice. doing wrong?
df.head(5) : x y ms 0 20.5815 14.1821 333.3333 1 nan nan 350 2 20.6112 14.2013 366.6667 3 nan nan 383.3333 4 20.5349 14.2232 400 df = df.set_index(df.ms) # set indices milliseconds when seek running
df.interpolate(method='values') i error:
--------------------------------------------------------------------------- typeerror traceback (most recent phone call last) <ipython-input-462-cb0f1f01eb84> in <module>() 12 13 ---> 14 df.interpolate(method='values') 15 16 /users/jsb/anaconda/lib/python2.7/site-packages/pandas/core/generic.pyc in interpolate(self, method, axis, limit, inplace, downcast, **kwargs) 2511 2512 if self._data.get_dtype_counts().get('object') == len(self.t): -> 2513 raise typeerror("cannot interpolate nans.") 2514 2515 # create/use index typeerror: cannot interpolate nans. i've tried running on individual series, homecoming set in:
temp = df.x temp.interpolate(method='values') 333.333333 20.5815 350.000000 nan 366.666667 20.6112 383.333333 nan 400.000000 20.5349 name: x, dtype: object edit :
props jeff inspiring solution.
adding:
df[['x','y','ms']] = df[['x','y','ms']].astype(float) before
df.interpolate(method='values') interpolation did trick.
i'm not able to reproduce error (see below copy/paste-able example), can create sure the info show representative of data?
in [137]: stringio import stringio in [138]: df = pd.read_csv(stringio(""" x y ms ...: 0 20.5815 14.1821 333.3333 ...: 1 nan nan 350 ...: 2 20.6112 14.2013 366.6667 ...: 3 nan nan 383.3333 ...: 4 20.5349 14.2232 400"""), delim_whitespace=true) in [140]: df = df.set_index(df.ms) in [142]: df.interpolate(method='values') out[142]: x y ms ms 333.3333 20.58150 14.18210 333.3333 350.0000 20.59635 14.19170 350.0000 366.6667 20.61120 14.20130 366.6667 383.3333 20.57305 14.21225 383.3333 400.0000 20.53490 14.22320 400.0000 python-2.7 pandas time-series interpolation
Comments
Post a Comment