Python 2.7 熊猫插回南部
我试图以60hz(~16ms)的间隔对位置数据进行基本插值。当我尝试在数据帧上使用pandas 0.14插值时,它告诉我我的数据集中只有nan(不是真的)。当我尝试在从数据帧中提取的单个序列上运行它时,它返回相同的序列,而不填充NAN。我尝试过使用不同的方法将索引设置为整数,摆弄插值函数的轴和限制参数——没有骰子。我做错了什么Python 2.7 熊猫插回南部,python-2.7,pandas,time-series,interpolation,Python 2.7,Pandas,Time Series,Interpolation,我试图以60hz(~16ms)的间隔对位置数据进行基本插值。当我尝试在数据帧上使用pandas 0.14插值时,它告诉我我的数据集中只有nan(不是真的)。当我尝试在从数据帧中提取的单个序列上运行它时,它返回相同的序列,而不填充NAN。我尝试过使用不同的方法将索引设置为整数,摆弄插值函数的轴和限制参数——没有骰子。我做错了什么 df.head(5) : x y ms 0 20.5815 14.1821 333.3333 1 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.
编辑:
为Jeff提供道具,鼓励他提出解决方案
添加:
df[['x','y','ms']] = df[['x','y','ms']].astype(float)
df = df.astype(float)
以前
df.interpolate(method='values')
df.interpolate(method='values')
插值成功了。我无法重现错误(请参见下面的可复制/粘贴示例),您能否确保显示的数据实际上代表了您的数据
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
根据您的编辑,为Jeff提供道具,以激励解决方案 添加:
df[['x','y','ms']] = df[['x','y','ms']].astype(float)
df = df.astype(float)
以前
df.interpolate(method='values')
df.interpolate(method='values')
插值也帮了我的忙。除非要子选择列集,否则不需要指定列 你能显示df.info()吗;u prob有对象数据类型df0.info()float64索引:100个条目,0.0到1650.0数据列(共3列):x 46非空对象y 46非空对象ms 100非空对象数据类型:对象(3)它们是对象数据类型-是否应转换为某种类型?
对象
数据类型不好。只有类字符串应该是object
dtype。您是如何生成/读取这些内容的?它们刚刚输入了vanilla pd.csv_read。我只做了一件事,用df=df[1:]删除一个额外的标题行。重置索引(drop=True)
并用df重命名列。重命名(列={'X center':'X','Y center':'Y'},inplace=True)
。我做错了什么?我查了你的,它也复制了。我还做了以下操作来添加NaN行:df=df.reindex(pd.Series(arange(0,hz2ms(60)*100,hz2ms(60))
,其中hz2ms是一个返回1000/hz的辅助函数