Установите pandas.tseries.index.DatetimeIndex.freq с помощью inferred_freq
Рассмотреть DatetimeIndex
tidx
tidx = pd.to_datetime(['2016-07-29', '2016-08-31', '2016-09-30'])
print(tidx.freq)
print(tidx.inferred_freq)
print(tidx)
None
BM
DatetimeIndex(['2016-07-29', '2016-08-31', '2016-09-30'], \
dtype='datetime64[ns]', freq=None)
Я хочу freq
атрибут, чтобы принять inferred_freq
атрибут... так что я
tidx.freq = tidx.inferred_freq
print(tidx)
--------------------------------------------------------------------------- AttributeError Traceback (most recent call last) <ipython-input-24-b49b104fda04> in <module>() 1 tidx.freq = tidx.inferred_freq ----> 2 print(tidx) C:\Users\ssmith\AppData\Local\Continuum\Anaconda2\lib\site-packages\pandas\core\base.pyc in __str__(self) 45 if compat.PY3: 46 return self.__unicode__() ---> 47 return self.__bytes__() 48 49 def __bytes__(self): C:\Users\ssmith\AppData\Local\Continuum\Anaconda2\lib\site-packages\pandas\core\base.pyc in __bytes__(self) 57 58 encoding = get_option("display.encoding") ---> 59 return self.__unicode__().encode(encoding, 'replace') 60 61 def __repr__(self): C:\Users\ssmith\AppData\Local\Continuum\Anaconda2\lib\site-packages\pandas\indexes\base.pyc in __unicode__(self) 581 klass = self.__class__.__name__ 582 data = self._format_data() --> 583 attrs = self._format_attrs() 584 space = self._format_space() 585 C:\Users\ssmith\AppData\Local\Continuum\Anaconda2\lib\site-packages\pandas\tseries\base.pyc in _format_attrs(self) 485 for attrib in self._attributes: 486 if attrib == 'freq': --> 487 freq = self.freqstr 488 if freq is not None: 489 freq = "'%s'" % freq C:\Users\ssmith\AppData\Local\Continuum\Anaconda2\lib\site-packages\pandas\tseries\base.pyc in freqstr(self) 223 if self.freq is None: 224 return None --> 225 return self.freq.freqstr 226 227 @cache_readonly AttributeError: 'str' object has no attribute 'freqstr'
вопрос
Как правильно сделать так, чтобы мой индекс предполагал, что это inferred_freq?
3 ответа
Решение
Непонятно, почему в документе указано, что вы можете установить freq
атрибут, но тогда он не сохраняется, но если вы реконструируете datetimeindex
еще раз, но передать freq
тогда это работает:
In [56]:
tidx = pd.DatetimeIndex(tidx.values, freq = tidx.inferred_freq)
tidx
Out[56]:
DatetimeIndex(['2016-07-29', '2016-08-31', '2016-09-30'], dtype='datetime64[ns]', freq='BM')
Вы можете напрямую использовать DatetimeIndex
конструктор с вашим списком строк и проходов 'infer'
как freq
:
In [2]: tidx = pd.DatetimeIndex(['2016-07-29', '2016-08-31', '2016-09-30'], freq='infer')
In [3]: tidx
Out[3]: DatetimeIndex(['2016-07-29', '2016-08-31', '2016-09-30'], dtype='datetime64[ns]', freq='BM')
Я задал еще один вопрос, чтобы помочь с этим. @root идентифицировал функцию для преобразования частотных строк. Так что это должно работать
tidx.freq = pd.tseries.frequencies.to_offset(tidx.inferred_freq)
DatetimeIndex(['2016-07-29', '2016-08-31', '2016-09-30'],
dtype='datetime64[ns]', freq='BM')