Skip to main content
 首页 » 编程设计

python之值错误 : index must be monotonic increasing or decreasing : Adding milliseconds

2025年05月04日23bluestorm

因此,在我将毫秒添加到日期/时间字段之前,我已经对数据进行了所有处理。

selected = selected['2017-02-20 16:10:05':'2017-02-20 16:20:06'] 是我过滤 data_frame 的声明**

以下数据在毫秒为 0000 时有效

正确填充毫秒后出现以下数据错误

更新: 我试过了

selected.sort_index() 
selected.ix['2017-02-20 16:10:05':'2017-02-20 16:20:06'] 
selected.ix[datetime.date(year=2017,month=2,day=20):datetime.date(year=2017,month=2,day=21)]  

TypeError: '>' 不支持 'str' 和 'datetime.date' 的实例

然后我得到以下内容

ValueError                                Traceback (most recent call last) 
/usr/local/lib/python3.6/site-packages/pandas/indexes/base.py in get_slice_bound(self, label, side, kind) 
   3121             try: 
-> 3122                 return self._searchsorted_monotonic(label, side) 
   3123             except ValueError: 
 
/usr/local/lib/python3.6/site-packages/pandas/indexes/base.py in _searchsorted_monotonic(self, label, side) 
   3087  
-> 3088         raise ValueError('index must be monotonic increasing or decreasing') 
   3089  
 
ValueError: index must be monotonic increasing or decreasing 
 
During handling of the above exception, another exception occurred: 
 
KeyError                                  Traceback (most recent call last) 
<ipython-input-43-a7bf11322082> in <module>() 
     11 selected = selected.query('y_acc < 0.4 and z_acc > -0.4') 
     12 selected = selected.query('z_acc < 0.4 and z_acc > -0.4') 
---> 13 selected = selected['2017-02-20 16:10:05':'2017-02-20 16:20:06'] 
     14  
     15 #%pylab inline 
 
/usr/local/lib/python3.6/site-packages/pandas/core/frame.py in __getitem__(self, key) 
   2045  
   2046         # see if we can slice the rows 
-> 2047         indexer = convert_to_index_sliceable(self, key) 
   2048         if indexer is not None: 
   2049             return self._getitem_slice(indexer) 
 
/usr/local/lib/python3.6/site-packages/pandas/core/indexing.py in convert_to_index_sliceable(obj, key) 
   1772     idx = obj.index 
   1773     if isinstance(key, slice): 
-> 1774         return idx._convert_slice_indexer(key, kind='getitem') 
   1775  
   1776     elif isinstance(key, compat.string_types): 
 
/usr/local/lib/python3.6/site-packages/pandas/indexes/base.py in _convert_slice_indexer(self, key, kind) 
   1236         else: 
   1237             try: 
-> 1238                 indexer = self.slice_indexer(start, stop, step, kind=kind) 
   1239             except Exception: 
   1240                 if is_index_slice: 
 
/usr/local/lib/python3.6/site-packages/pandas/indexes/base.py in slice_indexer(self, start, end, step, kind) 
   2995         """ 
   2996         start_slice, end_slice = self.slice_locs(start, end, step=step, 
-> 2997                                                  kind=kind) 
   2998  
   2999         # return a slice 
 
/usr/local/lib/python3.6/site-packages/pandas/indexes/base.py in slice_locs(self, start, end, step, kind) 
   3174         start_slice = None 
   3175         if start is not None: 
-> 3176             start_slice = self.get_slice_bound(start, 'left', kind) 
   3177         if start_slice is None: 
   3178             start_slice = 0 
 
/usr/local/lib/python3.6/site-packages/pandas/indexes/base.py in get_slice_bound(self, label, side, kind) 
   3123             except ValueError: 
   3124                 # raise the original KeyError 
-> 3125                 raise err 
   3126  
   3127         if isinstance(slc, np.ndarray): 
 
/usr/local/lib/python3.6/site-packages/pandas/indexes/base.py in get_slice_bound(self, label, side, kind) 
   3117         # we need to look up the label 
   3118         try: 
-> 3119             slc = self.get_loc(label) 
   3120         except KeyError as err: 
   3121             try: 
 
/usr/local/lib/python3.6/site-packages/pandas/indexes/base.py in get_loc(self, key, method, tolerance) 
   2134                 return self._engine.get_loc(key) 
   2135             except KeyError: 
-> 2136                 return self._engine.get_loc(self._maybe_cast_indexer(key)) 
   2137  
   2138         indexer = self.get_indexer([key], method=method, tolerance=tolerance) 
 
pandas/index.pyx in pandas.index.IndexEngine.get_loc (pandas/index.c:4433)() 
 
pandas/index.pyx in pandas.index.IndexEngine.get_loc (pandas/index.c:4279)() 
 
pandas/src/hashtable_class_helper.pxi in pandas.hashtable.PyObjectHashTable.get_item (pandas/hashtable.c:13742)() 
 
pandas/src/hashtable_class_helper.pxi in pandas.hashtable.PyObjectHashTable.get_item (pandas/hashtable.c:13696)() 
 
KeyError: '2017-02-20 16:10:05' 

请您参考如下方法:

按日期时间索引过滤

selected_subset = selected.ix['2017-02-20 16:10:05':'2017-02-20 16:20:06'] 

引用:filtering pandas dataframes on dates

我试过了,它对我有用:

import pandas as pd 
import numpy as np 
from datetime import datetime 
 
date_time_1 = datetime.now() 
 
date_time_2 = datetime.now() 
 
data = [{'time': date_time_1, 'val': 1}, {'time': date_time_2, 'val':2}] 
 
df = pd.DataFrame.from_dict(data, orient='columns') 
 
df.set_index(['time'], inplace=True) 
 
df = df.sort_index() # This is an important step if 'time' field is not sorted 
df 
 
 
                            val 
time     
2017-02-28 19:19:00.777225  1 
2017-02-28 19:19:04.605302  2 
 
df.ix['2017-02-28 19:19:00':'2017-02-28 19:19:03'] 
 
 
                            val 
time     
2017-02-28 19:19:00.777225  1