示例#1
0
    def get_value(self, series, key):
        """
        Fast lookup of value from 1-dimensional ndarray. Only use this if you
        know what you're doing
        """
        if is_integer(key):
            return series.iat[key]

        if isinstance(key, str):
            asdt, reso = parse_time_string(key, self.freq)
            grp = resolution.Resolution.get_freq_group(reso)
            freqn = resolution.get_freq_group(self.freq)

            vals = self._ndarray_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._ndarray_values, [ord1, ord2])
                key = slice(pos[0], pos[1] + 1)
                return series[key]
            elif grp == freqn:
                key = Period(asdt, freq=self.freq)
                loc = self.get_loc(key)
                return series.iloc[loc]
            else:
                raise KeyError(key)

        elif isinstance(key, Period) or key is NaT:
            ordinal = key.ordinal if key is not NaT else NaT.value
            loc = self._engine.get_loc(ordinal)
            return series[loc]

        # slice, PeriodIndex, np.ndarray, List[Period]
        value = Index.get_value(self, series, key)
        return com.maybe_box(self, value, series, key)
示例#2
0
    def get_value(self, series, key):
        """
        Fast lookup of value from 1-dimensional ndarray. Only use this if you
        know what you're doing
        """
        if is_integer(key):
            return series.iat[key]

        if isinstance(key, str):
            try:
                loc = self._get_string_slice(key)
                return series[loc]
            except (TypeError, ValueError):
                pass

            asdt, reso = parse_time_string(key, self.freq)
            grp = resolution.Resolution.get_freq_group(reso)
            freqn = resolution.get_freq_group(self.freq)

            # _get_string_slice will handle cases where grp < freqn
            assert grp >= freqn

            if grp == freqn:
                key = Period(asdt, freq=self.freq)
                loc = self.get_loc(key)
                return series.iloc[loc]
            else:
                raise KeyError(key)

        elif isinstance(key, Period) or key is NaT:
            ordinal = key.ordinal if key is not NaT else NaT.value
            loc = self._engine.get_loc(ordinal)
            return series[loc]

        # slice, PeriodIndex, np.ndarray, List[Period]
        value = Index.get_value(self, series, key)
        return com.maybe_box(self, value, series, key)