【问题标题】:ValueError: index must be monotonic increasing or decreasing : Adding millisecondsValueError:索引必须单调递增或递减:添加毫秒
【发布时间】:2017-07-19 12:31:49
【问题描述】:

所以在我将毫秒添加到日期/时间字段之前,我的所有数据都可以处理。

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

以下数据在毫秒为 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'

【问题讨论】:

  • 排序索引df = df.sort_index()怎么样?
  • 谢谢,我想根据它的索引过滤我的数据
  • 你试过这个selected.ix['2017-02-20 16:10:05':'2017-02-20 16:20:06'] :stackoverflow.com/questions/22898824/…
  • 我刚试了还是不行
  • 当您尝试使用ix[ 没有 datetime 对象时会出现什么错误?

标签: python pandas


【解决方案1】:

问题原来是它认为日期索引是一个字符串。我发现了这一点:

selected.ix[datetime.date(year=2017,month=2,day=20):datetime.date(year=2017,month=2,day=21)]

返回错误:TypeError: '>' not supported between 'str' and 'datetime.date'

然后我在 read_csv 命令中添加了 parse_dates=True 并解决了问题。

然后我可以使用

selected = selected['2017-02-20 16:10:05':'2017-02-20 16:11:06']

【讨论】:

    【解决方案2】:

    按日期时间索引过滤

    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
    

    【讨论】:

      猜你喜欢
      • 2015-09-25
      • 2019-11-18
      • 1970-01-01
      • 2017-12-05
      • 2019-06-05
      • 2017-12-07
      • 1970-01-01
      • 2021-04-09
      • 2014-03-18
      相关资源
      最近更新 更多