Esempio n. 1
0
    def asfreq(self, freq=None, how='E'):
        how = _validate_end_alias(how)

        freq = _freq_mod.get_standard_freq(freq)

        base1, mult1 = _gfc(self.freq)

        if isinstance(freq, basestring):
            base2, mult2 = _gfc(freq)
        else:
            base2, mult2 = freq

        if mult2 != 1:
            raise ValueError('Only mult == 1 supported')

        if how not in ('S', 'E'):
            raise ValueError('relation argument must be one of S or E')

        end = how == 'E'
        new_data = lib.period_asfreq_arr(self.values, base1, base2, end)

        result = new_data.view(PeriodIndex)
        result.name = self.name
        result.freq = freq
        return result
Esempio n. 2
0
    def asfreq(self, freq=None, how="E"):
        how = _validate_end_alias(how)

        base1, mult1 = _gfc(self.freq)

        if isinstance(freq, basestring):
            base2, mult2 = _gfc(freq)
        else:
            base2, mult2 = freq

        new_data = lib.period_asfreq_arr(self.values, base1, mult1, base2, mult2, how)

        return PeriodIndex(new_data, freq=freq)
Esempio n. 3
0
    def asfreq(self, freq=None, how='E'):
        how = _validate_end_alias(how)

        base1, mult1 = _gfc(self.freq)

        if isinstance(freq, basestring):
            base2, mult2 = _gfc(freq)
        else:
            base2, mult2 = freq

        if how not in ('S', 'E'):
            raise ValueError('relation argument must be one of S or E')

        end = how == 'E'
        new_data = lib.period_asfreq_arr(self.values, base1, mult1,
                                         base2, mult2, end)

        return PeriodIndex(new_data, freq=freq)
Esempio n. 4
0
    def __new__(cls, data=None,
                freq=None, start=None, end=None, periods=None,
                copy=False, name=None):

        if isinstance(freq, Period):
            freq = freq.freq
        else:
            freq = _freq_mod.get_standard_freq(freq)

        if data is None:
            subarr, freq = _get_ordinal_range(start, end, periods, freq)
            subarr = subarr.view(cls)
            subarr.name = name
            subarr.freq = freq

            return subarr

        if not isinstance(data, np.ndarray):
            if np.isscalar(data):
                raise ValueError('PeriodIndex() must be called with a '
                                 'collection of some kind, %s was passed'
                                 % repr(data))

            elif isinstance(data, Period):
                raise ValueError('Data must be array of dates, strings, '
                                 'or Period objects')

            # other iterable of some kind
            if not isinstance(data, (list, tuple)):
                data = list(data)

            try:
                data = np.array(data, dtype='i8')
            except:
                data = np.array(data, dtype='O')

            if freq is None and len(data) > 0:
                freq = getattr(data[0], 'freq', None)

            if freq is None:
                raise ValueError(('freq not specified and cannot be inferred '
                                  'from first element'))

            data = _period_unbox_array(data, check=freq)
        else:
            if isinstance(data, PeriodIndex):
                if freq is None or freq == data.freq:
                    freq = data.freq
                    data = data.values
                else:
                    base1, mult1 = _gfc(data.freq)
                    base2, mult2 = _gfc(freq)
                    how = py3compat.str_to_bytes('E')
                    data = lib.period_asfreq_arr(data.values, base1, mult1,
                                                 base2, mult2, how)
            else:
                if freq is None and len(data) > 0:
                    freq = getattr(data[0], 'freq')

                if freq is None:
                    raise ValueError(('freq not specified and cannot be '
                                      'inferred from first element'))

                if data.dtype == np.datetime64:
                    data = dt64arr_to_periodarr(data, freq)
                elif data.dtype == np.int64:
                    pass
                else:
                    try:
                        data = data.astype('i8')
                    except:
                        data = data.astype('O')
                        data = _period_unbox_array(data, check=freq)

        data = np.array(data, dtype=np.int64, copy=False)

        if (data <= 0).any():
            raise ValueError("Found illegal (<= 0) values in data")

        subarr = data.view(cls)
        subarr.name = name
        subarr.freq = freq

        return subarr
Esempio n. 5
0
    def __new__(cls, data=None, freq=None, start=None, end=None, periods=None, copy=False, name=None):

        if isinstance(freq, Period):
            freq = freq.freq
        else:
            freq = datetools.get_standard_freq(freq)

        if data is None:
            if start is None and end is None:
                raise ValueError("Must specify start, end, or data")

            start = to_period(start, freq)
            end = to_period(end, freq)

            is_start_intv = isinstance(start, Period)
            is_end_intv = isinstance(end, Period)
            if start is not None and not is_start_intv:
                raise ValueError("Failed to convert %s to period" % start)

            if end is not None and not is_end_intv:
                raise ValueError("Failed to convert %s to period" % end)

            if is_start_intv and is_end_intv and (start.freq != end.freq):
                raise ValueError("Start and end must have same freq")

            if freq is None:
                if is_start_intv:
                    freq = start.freq
                elif is_end_intv:
                    freq = end.freq
                else:
                    raise ValueError("Could not infer freq from start/end")

            if periods is not None:
                if start is None:
                    data = np.arange(end.ordinal - periods + 1, end.ordinal + 1, dtype=np.int64)
                else:
                    data = np.arange(start.ordinal, start.ordinal + periods, dtype=np.int64)
            else:
                if start is None or end is None:
                    msg = "Must specify both start and end if periods is None"
                    raise ValueError(msg)
                data = np.arange(start.ordinal, end.ordinal + 1, dtype=np.int64)

            subarr = data.view(cls)
            subarr.name = name
            subarr.freq = freq

            return subarr

        if not isinstance(data, np.ndarray):
            if np.isscalar(data):
                raise ValueError(
                    "PeriodIndex() must be called with a " "collection of some kind, %s was passed" % repr(data)
                )

            if isinstance(data, Period):
                data = [data]

            # other iterable of some kind
            if not isinstance(data, (list, tuple)):
                data = list(data)

            try:
                data = np.array(data, dtype="i8")
            except:
                data = np.array(data, dtype="O")

            if freq is None:
                raise ValueError("freq cannot be none")

            data = _period_unbox_array(data, check=freq)
        else:
            if isinstance(data, PeriodIndex):
                if freq is None or freq == data.freq:
                    freq = data.freq
                    data = data.values
                else:
                    base1, mult1 = _gfc(data.freq)
                    base2, mult2 = _gfc(freq)
                    data = lib.period_asfreq_arr(data.values, base1, mult1, base2, mult2, "E")
            else:
                if freq is None:
                    raise ValueError("freq cannot be none")

                if data.dtype == np.datetime64:
                    data = dt64arr_to_periodarr(data, freq)
                elif data.dtype == np.int64:
                    pass
                else:
                    data = data.astype("i8")

        data = np.array(data, dtype=np.int64, copy=False)

        if (data <= 0).any():
            raise ValueError("Found illegal (<= 0) values in data")

        subarr = data.view(cls)
        subarr.name = name
        subarr.freq = freq

        return subarr