我试图以60hz(~16ms)的间隔对位置数据进行基本插值。当我尝试在数据帧上使用pandas 0.14插值时,它告诉我在我的数据集中只有NaN(不是真的)。当我尝试在从数据帧中拉出的单个系列上运行它时,它返回相同的系列而没有填充NaN。我已经尝试使用不同的方法将索引设置为整数,摆弄轴并限制参数插值功能 - 没有骰子。我做错了什么?
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 to milliseconds
当我尝试跑步时
df.interpolate(method='values')
我收到此错误:
---------------------------------------------------------------------------
TypeError Traceback (most recent 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 with all NaNs.")
2514
2515 # create/use the index
TypeError: Cannot interpolate with all NaNs.
我也尝试过单个系列,只返回我输入的内容:
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
编辑:
向Jeff致敬,以鼓励解决方案。
添加:
df[['x','y','ms']] = df[['x','y','ms']].astype(float)
前
df.interpolate(method='values')
插值完成了这个技巧。
答案 0 :(得分:2)
根据您对Jeff的道具进行编辑,以启发解决方案。
添加:
df = df.astype(float)
前
df.interpolate(method='values')
插值也为我做了伎俩。除非您要选择列集,否则无需指定列。
答案 1 :(得分:0)
我无法重现错误(请参阅下面的复制/粘贴示例),您是否可以确保您显示的数据实际代表您的数据?
In [137]: from 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