Python Numpy o Pandas Interpolación lineal para valores relacionados con fecha y hora

Tengo datos que se parecen a los siguientes, pero también tengo control sobre cómo se formatea. Básicamente, quiero usar Python con Numpy o Pandas para interpolar el conjunto de datos para lograr datos interpolados segundo a segundo para que sea una resolución mucho más alta.

Así que quiero interpolar linealmente y producir nuevos valores entre cada uno de los valores reales que tengo actualmente, a la vez que mantengo los valores originales.

¿Cómo puedo lograr esto con Pandas o Numpy?

Como ejemplo, tengo este tipo de datos:

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,@ ... 

Y me gustaría que sea segundo a segundo, es decir

  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,@ 

Por favor, muéstrame un ejemplo de cómo puedo lograr esto. ¡Gracias!

He intentado esto:

 #! /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,@ 

¿Cómo uso “newRange” para crear valores interpolados linealmente entre los valores reales en “x”?

Usando pandas git master ( 98e48ca ) puedes hacer lo siguiente:

 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] 

Por defecto, Series.interpolate() realiza una interpolación lineal. También puede usar DataFrame.resample() con datos muestreados irregularmente.

Ok, hice esto:

 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') z = np.array([x[0]]) for i in range(1,len(newRange)-1): z = np.append(z,np.array([np.nan])) z = np.append(z,np.array([1])) print len(z) print len(newRange) ts = Series(z, index=newRange) ts = ts.interpolate() print ts.head()