日期时间相关值的 Python Numpy 或 Pandas 线性插值

标签 python numpy pandas scipy interpolation

我有如下所示的数据,但我也可以控制它的格式。基本上,我想使用带有 Numpy 或 Pandas 的 Python 对数据集进行插值,以实现逐秒插值数据,从而获得更高的分辨率。

所以我想在我当前拥有的每个实数值之间进行线性插值并生成新值,同时保持原始值。

如何使用 Pandas 或 Numpy 完成此操作?

例如,我有这种类型的数据:

       TIME               ECI_X            ECI_Y          ECI_Z
 2013-12-07 00:00:00, -7346664.77912, -13323447.6311, 21734849.5263,@
 2013-12-07 00:01:00, -7245621.40363, -13377562.35, 21735850.3527,@
 2013-12-07 00:01:30, -7142326.20854, -13432541.9267, 21736462.4521,@
 2013-12-07 00:02:00, -7038893.48454, -13487262.8599, 21736650.3293,@
 2013-12-07 00:02:30, -6935325.24526, -13541724.0946, 21736413.9937,@
 2013-12-07 00:03:00, -6833738.23865, -13594806.9333, 21735778.2218,@
 2013-12-07 00:03:30, -6729905.37597, -13648746.6281, 21734705.6406,@
 2013-12-07 00:04:00, -6625943.01291, -13702423.5112, 21733208.9233,@
 2013-12-07 00:04:30, -6521853.17291, -13755836.5481, 21731288.1125,@
 2013-12-07 00:05:00, -6419753.85176, -13807871.3011, 21729016.1386,@
 2013-12-07 00:05:30, -6315415.32918, -13860754.6497, 21726259.4135,@
 2013-12-07 00:06:00, -6210955.33186, -13913371.1187, 21723078.7695,@
 ...

我希望它是一秒一秒 - 即

 2013-12-07 00:00:00, -7346664.77912, -13323447.6311, 21734849.5263,@
 2013-12-07 00:00:01, -7346665.10000, -13323448.1000, 21734850.1000,@
 ...
 2013-12-07 00:00:59, -7346611.10000, -13323461.1000, 21734850.1000,@
 2013-12-07 00:01:00, -7245621.40363, -13377562.3500, 21735850.3527,@

请举例说明如何完成此操作。谢谢!

我已经试过了:

#! /usr/bin/python

import datetime
from pandas import *

first = datetime(2013,12,8,0,0,0)
second = datetime(2013,12,8,0,2,0)
dates = [first,second]
x = np.array([617003.390723, 884235.38059])
newRange =  date_range(first, second, freq='S')
ts = Series(x, index=dates)
ts.interpolate()
print ts.head()

#2013-12-08 00:00:00, 617003.390723, -26471116.2566, 3974868.93334,@
#2013-12-08 00:02:00, 884235.38059, -26519366.9219, 3601627.52947,@

如何使用“newRange”在“x”中的实数值之间创建线性插值?

最佳答案

使用 pandas git master (98e48ca) 您可以执行以下操作:

In [27]: n = 4

In [28]: df = DataFrame(randn(n, 2), index=date_range('1/1/2001', periods=n, freq='30S'))

In [29]: resampled = df.resample('S')

In [30]: resampled.head()
Out[30]:
                         0      1
2001-01-01 00:00:00 -1.045 -1.067
2001-01-01 00:00:01    NaN    NaN
2001-01-01 00:00:02    NaN    NaN
2001-01-01 00:00:03    NaN    NaN
2001-01-01 00:00:04    NaN    NaN

[5 rows x 2 columns]

In [31]: interp = resampled.interpolate()

In [32]: interp.head()
Out[32]:
                         0      1
2001-01-01 00:00:00 -1.045 -1.067
2001-01-01 00:00:01 -1.014 -1.042
2001-01-01 00:00:02 -0.983 -1.018
2001-01-01 00:00:03 -0.952 -0.993
2001-01-01 00:00:04 -0.921 -0.969

[5 rows x 2 columns]

In [33]: interp.tail()
Out[33]:
                         0      1
2001-01-01 00:01:26  0.393  0.622
2001-01-01 00:01:27  0.337  0.571
2001-01-01 00:01:28  0.281  0.519
2001-01-01 00:01:29  0.225  0.468
2001-01-01 00:01:30  0.169  0.416

[5 rows x 2 columns]

默认情况下 Series.interpolate() 执行线性插值。您也可以对不规则采样的数据使用 DataFrame.resample()

关于日期时间相关值的 Python Numpy 或 Pandas 线性插值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20454259/

相关文章:

python - Pandas groupby : Nested loop fails with key error

python - 合并返回奇数长度

python - 使用Python替换JSON文件中的单词

python - 处理来自非平面文件的文本(提取信息,就好像它*是*平面文件一样)

python - 显示来自通过套接字发送的numpy Array的图像

python - 在 Python 中识别某些字符串的最佳方法

Python Numpy - 连接三个数组以形成矩阵或 3D 数组

python - 计算时间跨度类次所需的设备

python - 如何对numpy数组的每两列执行操作?

python - Dropna 没有下降,fillna 没有填充,我的列表理解无法理解如何摆脱 nans (python)