pandas.Series.interpolate () no hace nada. ¿Por qué?

Tengo un dataframe con DatetimeIndex. Esta es una de las columnas:

>>> y.out_brd 2013-01-01 11:25:00 0.04464286 2013-01-01 11:30:00 NaN 2013-01-01 11:35:00 NaN 2013-01-01 11:40:00 0.005952381 2013-01-01 11:45:00 0.01785714 2013-01-01 11:50:00 0.008928571 Freq: 5T, Name: out_brd, dtype: object 

Cuando trato de usar interpolate() en la función, no obtengo absolutamente ningún cambio:

 >>> y.out_brd.interpolate(method='time') 2013-01-01 11:25:00 0.04464286 2013-01-01 11:30:00 NaN 2013-01-01 11:35:00 NaN 2013-01-01 11:40:00 0.005952381 2013-01-01 11:45:00 0.01785714 2013-01-01 11:50:00 0.008928571 Freq: 5T, Name: out_brd, dtype: object 

¿Cómo hacer que funcione?

Actualización: el código para generar dicho dataframe.

 time_index = pd.date_range(start=datetime(2013, 1, 1, 3), end=datetime(2013, 1, 2, 2, 59), freq='5T') grid_columns = [u'in_brd', u'in_alt', u'out_brd', u'out_alt'] df = pd.DataFrame(index=time_index, columns=grid_columns) 

Después de eso relleno las celdas con algunos datos.

Tengo dataframe field_data con datos de encuestas sobre embarque y aterrizaje en el ferrocarril y la variable de station . También tengo la función interval_end definida así:

 interval_end = lambda index, prec_lvl: index.to_datetime() \ + timedelta(minutes=prec_lvl - 1, seconds=59) 

El código:

 for index, row in df.iterrows(): recs = field_data[(field_data.station_name == station) & (field_data.arrive_time >= index.time()) & (field_data.arrive_time <= interval_end( index, prec_lvl).time())] in_recs_num = recs[recs.orientation == u'in'][u'train_number'].count() out_recs_num = recs[recs.orientation == u'out'][u'train_number'].count() if in_recs_num: df.loc[index, u'in_brd'] = recs[ recs.orientation == u'in'][u'boarding'].sum() / \ (in_recs_num * CAR_CAPACITY) df.loc[index, u'in_alt'] = recs[ recs.orientation == u'in'][u'alighting'].sum() / \ (in_recs_num * CAR_CAPACITY) if out_recs_num: df.loc[index, u'out_brd'] = recs[ recs.orientation == u'out'][u'boarding'].sum() / \ (out_recs_num * CAR_CAPACITY) df.loc[index, u'out_alt'] = recs[ recs.orientation == u'out'][u'alighting'].sum() / \ (out_recs_num * CAR_CAPACITY) 

Debe convertir su Series para tener un dtype de float64 lugar de su object actual. Aquí hay un ejemplo para ilustrar la diferencia. Tenga en cuenta que, en general, las series de object dtype son de uso limitado, el caso más común es una Series contiene cadenas. Aparte de eso, son muy lentos ya que no pueden aprovechar ninguna información de tipo de datos.

 In [9]: s = Series(randn(6), index=pd.date_range('2013-01-01 11:25:00', freq='5T', periods=6), dtype=object) In [10]: s.iloc[1:3] = nan In [11]: s Out[11]: 2013-01-01 11:25:00 -0.69522 2013-01-01 11:30:00 NaN 2013-01-01 11:35:00 NaN 2013-01-01 11:40:00 -0.70308 2013-01-01 11:45:00 -1.5653 2013-01-01 11:50:00 0.95893 Freq: 5T, dtype: object In [12]: s.interpolate(method='time') Out[12]: 2013-01-01 11:25:00 -0.69522 2013-01-01 11:30:00 NaN 2013-01-01 11:35:00 NaN 2013-01-01 11:40:00 -0.70308 2013-01-01 11:45:00 -1.5653 2013-01-01 11:50:00 0.95893 Freq: 5T, dtype: object In [13]: s.astype(float).interpolate(method='time') Out[13]: 2013-01-01 11:25:00 -0.6952 2013-01-01 11:30:00 -0.6978 2013-01-01 11:35:00 -0.7005 2013-01-01 11:40:00 -0.7031 2013-01-01 11:45:00 -1.5653 2013-01-01 11:50:00 0.9589 Freq: 5T, dtype: float64