首页 > 解决方案 > 熊猫:以一定的价值填补时间空白

问题描述

我有以下数据框:

    timestamp            value
    2018-02-26 09:13:00  0.972198
    2018-02-26 09:14:00  1.008504
    2018-02-26 09:15:00  1.011961
    2018-02-26 09:18:00  1.018950
    2018-02-26 09:19:00  1.008538
    2018-02-26 09:21:00  0.988535
    2018-02-26 09:22:00  0.944170
    2018-02-26 09:23:00  0.940284

我想用 value = 2 填补时间戳中的所有空白,所以输出如下:

    timestamp            value
    2018-02-26 09:13:00  0.972198
    2018-02-26 09:14:00  1.008504
    2018-02-26 09:15:00  1.011961
    2018-02-26 09:16:00  2.0
    2018-02-26 09:17:00  2.0
    2018-02-26 09:18:00  1.018950
    2018-02-26 09:19:00  1.008538
    2018-02-26 09:20:00  2.0
    2018-02-26 09:21:00  0.988535
    2018-02-26 09:22:00  0.944170
    2018-02-26 09:23:00  0.940284

我首先使用以下代码来填补时间戳中的空白:

df.reindex(index = 'timestamp')

但出现以下错误。我想知道我在这里错过了什么?谢谢!

TypeErrorTraceback (most recent call last)
<ipython-input-5-cf75ce057c42> in <module>()
----> 1 df.reindex(index = 'timestamp')

/opt/conda/envs/python2/lib/python2.7/site-packages/pandas/core/frame.pyc in reindex(self, index, columns, **kwargs)
   2731     def reindex(self, index=None, columns=None, **kwargs):
   2732         return super(DataFrame, self).reindex(index=index, columns=columns,
-> 2733                                               **kwargs)
   2734 
   2735     @Appender(_shared_docs['reindex_axis'] % _shared_doc_kwargs)

/opt/conda/envs/python2/lib/python2.7/site-packages/pandas/core/generic.pyc in reindex(self, *args, **kwargs)
   2513         # perform the reindex on the axes
   2514         return self._reindex_axes(axes, level, limit, tolerance, method,
-> 2515                                   fill_value, copy).__finalize__(self)
   2516 
   2517     def _reindex_axes(self, axes, level, limit, tolerance, method, fill_value,

/opt/conda/envs/python2/lib/python2.7/site-packages/pandas/core/frame.pyc in _reindex_axes(self, axes, level, limit, tolerance, method, fill_value, copy)
   2677         if index is not None:
   2678             frame = frame._reindex_index(index, method, copy, level,
-> 2679                                          fill_value, limit, tolerance)
   2680 
   2681         return frame

/opt/conda/envs/python2/lib/python2.7/site-packages/pandas/core/frame.pyc in _reindex_index(self, new_index, method, copy, level, fill_value, limit, tolerance)
   2685         new_index, indexer = self.index.reindex(new_index, method=method,
   2686                                                 level=level, limit=limit,
-> 2687                                                 tolerance=tolerance)
   2688         return self._reindex_with_indexers({0: [new_index, indexer]},
   2689                                            copy=copy, fill_value=fill_value,

/opt/conda/envs/python2/lib/python2.7/site-packages/pandas/core/indexes/base.pyc in reindex(self, target, method, level, limit, tolerance)
   2865             target = self._simple_new(None, dtype=self.dtype, **attrs)
   2866         else:
-> 2867             target = _ensure_index(target)
   2868 
   2869         if level is not None:

/opt/conda/envs/python2/lib/python2.7/site-packages/pandas/core/indexes/base.pyc in _ensure_index(index_like, copy)
   4025             index_like = copy(index_like)
   4026 
-> 4027     return Index(index_like)
   4028 
   4029 

/opt/conda/envs/python2/lib/python2.7/site-packages/pandas/core/indexes/base.pyc in __new__(cls, data, dtype, copy, name, fastpath, tupleize_cols, **kwargs)
    324                          **kwargs)
    325         elif data is None or is_scalar(data):
--> 326             cls._scalar_data_error(data)
    327         else:
    328             if (tupleize_cols and isinstance(data, list) and data and

/opt/conda/envs/python2/lib/python2.7/site-packages/pandas/core/indexes/base.pyc in _scalar_data_error(cls, data)
    676         raise TypeError('{0}(...) must be called with a collection of some '
    677                         'kind, {1} was passed'.format(cls.__name__,
--> 678                                                       repr(data)))
    679 
    680     @classmethod

TypeError: Index(...) must be called with a collection of some kind, 'time' was passed

标签: pythonpandasreindex

解决方案


resample+fillna

df.set_index('timestamp').resample('60s').mean().fillna(2).reset_index()
Out[907]: 
             timestamp     value
0  2018-02-26 09:13:00  0.972198
1  2018-02-26 09:14:00  1.008504
2  2018-02-26 09:15:00  1.011961
3  2018-02-26 09:16:00  2.000000
4  2018-02-26 09:17:00  2.000000
5  2018-02-26 09:18:00  1.018950
6  2018-02-26 09:19:00  1.008538
7  2018-02-26 09:20:00  2.000000
8  2018-02-26 09:21:00  0.988535
9  2018-02-26 09:22:00  0.944170
10 2018-02-26 09:23:00  0.940284

推荐阅读