Python 2.7 熊猫插回南部

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

我试图以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.
编辑:

为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的辅助函数