如何插入这样的时间序列?
>>> df=pd.DataFrame([1,2,np.nan,4],columns=['val'],index=pd.to_timedelta([1,2,3,4],unit='s'))
>>> df
val
00:00:01 1
00:00:02 2
00:00:03 NaN
00:00:04 4
以下插值不起作用。
df.interpolate(method='time')
...
TypeError: Cannot cast array data from dtype('<m8[ns]') to dtype('float64') according to the rule 'safe'
有谁知道原因或任何变通方法?谢谢你的帮助!
答案 0 :(得分:2)
这看起来像一个错误/缺失的功能。这是一个解决方法:
In [11]: ind = df.index
In [12]: df.index = df.index.total_seconds()
In [13]: df.interpolate(method="index")
Out[13]:
val
1 1
2 2
3 3
4 4
In [14]: df = df.interpolate(method="index")
In [15]: df.index = ind
In [16]: df
Out[16]:
val
00:00:01 1
00:00:02 2
00:00:03 3
00:00:04 4
或在一个功能中:
def interpolate_delta(df, inplace=False):
if not inplace:
df = df.copy()
ind = df.index
df.index = df.index.total_seconds()
df.interpolate(method="index", inplace=True)
df.index = ind
return df