def get_value(self, series, key): """ Fast lookup of value from 1-dimensional ndarray. Only use this if you know what you're doing """ try: return super(PeriodIndex, self).get_value(series, key) except KeyError: try: asdt, parsed, reso = parse_time_string(key) grp = _freq_mod._infer_period_group(reso) freqn = _freq_mod._period_group(self.freq) # if our data is higher resolution than requested key, slice if grp < freqn: iv = Period(asdt, freq=(grp,1)) ord1 = iv.asfreq(self.freq, how='S').ordinal ord2 = iv.asfreq(self.freq, how='E').ordinal pos = np.searchsorted(self.values, [ord1, ord2]) key = slice(pos[0], pos[1]+1) return series[key] else: key = to_period(asdt, freq=self.freq).ordinal return self._engine.get_value(series, key) except TypeError: pass except KeyError: pass except IndexError: ival = Period(key, freq=self.freq) raise IndexError("%s is out of bounds" % ival) key = to_period(key, self.freq).ordinal return self._engine.get_value(series, key)
def get_value(self, series, key): """ Fast lookup of value from 1-dimensional ndarray. Only use this if you know what you're doing """ try: return super(PeriodIndex, self).get_value(series, key) except (KeyError, IndexError): try: asdt, parsed, reso = parse_time_string(key, self.freq) grp = _freq_mod._infer_period_group(reso) freqn = _freq_mod._period_group(self.freq) # if our data is higher resolution than requested key, slice if grp < freqn: iv = Period(asdt, freq=(grp,1)) ord1 = iv.asfreq(self.freq, how='S').ordinal ord2 = iv.asfreq(self.freq, how='E').ordinal pos = np.searchsorted(self.values, [ord1, ord2]) key = slice(pos[0], pos[1]+1) return series[key] else: key = to_period(asdt, freq=self.freq) return self._engine.get_value(series, key.ordinal) except TypeError: pass except KeyError: pass except IndexError: ival = Period(key, freq=self.freq) raise IndexError("%s is out of bounds" % ival) key = to_period(key, self.freq) return self._engine.get_value(series, key.ordinal)
def _get_string_slice(self, key): if not self.is_monotonic: raise ValueError('Partial indexing only valid for ' 'ordered time series') key, parsed, reso = parse_time_string(key, self.freq) grp = _freq_mod._infer_period_group(reso) freqn = _freq_mod._period_group(self.freq) if reso == 'year': t1 = Period(year=parsed.year, freq='A') elif reso == 'month': t1 = Period(year=parsed.year, month=parsed.month, freq='M') elif reso == 'quarter': q = (parsed.month - 1) // 3 + 1 t1 = Period(year=parsed.year, quarter=q, freq='Q-DEC') elif reso == 'day' and grp < freqn: t1 = Period(year=parsed.year, month=parsed.month, day=parsed.day, freq='D') elif reso == 'hour' and grp < freqn: t1 = Period(year=parsed.year, month=parsed.month, day=parsed.day, hour=parsed.hour, freq='H') elif reso == 'minute' and grp < freqn: t1 = Period(year=parsed.year, month=parsed.month, day=parsed.day, hour=parsed.hour, minute=parsed.minute, freq='T') elif reso == 'second' and grp < freqn: t1 = Period(year=parsed.year, month=parsed.month, day=parsed.day, hour=parsed.hour, minute=parsed.minute, second=parsed.second, freq='S') else: raise KeyError(key) ordinals = self.values t2 = t1.asfreq(self.freq, how='end') t1 = t1.asfreq(self.freq, how='start') left = ordinals.searchsorted(t1.ordinal, side='left') right = ordinals.searchsorted(t2.ordinal, side='right') return slice(left, right)
def _get_string_slice(self, key): if not self.is_monotonic: raise ValueError('Partial indexing only valid for ' 'ordered time series') key, parsed, reso = parse_time_string(key, self.freq) grp = frequencies._infer_period_group(reso) freqn = frequencies._period_group(self.freq) if reso in ['day', 'hour', 'minute', 'second'] and not grp < freqn: raise KeyError(key) t1, t2 = self._parsed_string_to_bounds(reso, parsed) return slice(self.searchsorted(t1.ordinal, side='left'), self.searchsorted(t2.ordinal, side='right'))
def _get_string_slice(self, key): if not self.is_monotonic: raise ValueError("Partial indexing only valid for " "ordered time series") key, parsed, reso = parse_time_string(key, self.freq) grp = _freq_mod._infer_period_group(reso) freqn = _freq_mod._period_group(self.freq) if reso == "year": t1 = Period(year=parsed.year, freq="A") elif reso == "month": t1 = Period(year=parsed.year, month=parsed.month, freq="M") elif reso == "quarter": q = (parsed.month - 1) // 3 + 1 t1 = Period(year=parsed.year, quarter=q, freq="Q-DEC") elif reso == "day" and grp < freqn: t1 = Period(year=parsed.year, month=parsed.month, day=parsed.day, freq="D") elif reso == "hour" and grp < freqn: t1 = Period(year=parsed.year, month=parsed.month, day=parsed.day, hour=parsed.hour, freq="H") elif reso == "minute" and grp < freqn: t1 = Period( year=parsed.year, month=parsed.month, day=parsed.day, hour=parsed.hour, minute=parsed.minute, freq="T" ) elif reso == "second" and grp < freqn: t1 = Period( year=parsed.year, month=parsed.month, day=parsed.day, hour=parsed.hour, minute=parsed.minute, second=parsed.second, freq="S", ) else: raise KeyError(key) ordinals = self.values t2 = t1.asfreq(self.freq, how="end") t1 = t1.asfreq(self.freq, how="start") left = ordinals.searchsorted(t1.ordinal, side="left") right = ordinals.searchsorted(t2.ordinal, side="right") return slice(left, right)
def get_value(self, series, key): """ Fast lookup of value from 1-dimensional ndarray. Only use this if you know what you're doing """ s = _values_from_object(series) try: return _maybe_box(self, super(PeriodIndex, self).get_value(s, key), series, key) except (KeyError, IndexError): try: asdt, parsed, reso = parse_time_string(key, self.freq) grp = frequencies._infer_period_group(reso) freqn = frequencies._period_group(self.freq) vals = self.values # if our data is higher resolution than requested key, slice if grp < freqn: iv = Period(asdt, freq=(grp, 1)) ord1 = iv.asfreq(self.freq, how='S').ordinal ord2 = iv.asfreq(self.freq, how='E').ordinal if ord2 < vals[0] or ord1 > vals[-1]: raise KeyError(key) pos = np.searchsorted(self.values, [ord1, ord2]) key = slice(pos[0], pos[1] + 1) return series[key] elif grp == freqn: key = Period(asdt, freq=self.freq).ordinal return _maybe_box(self, self._engine.get_value(s, key), series, key) else: raise KeyError(key) except TypeError: pass key = Period(key, self.freq).ordinal return _maybe_box(self, self._engine.get_value(s, key), series, key)