コード例 #1
0
    def __array_wrap__(self, result, context=None):
        """
        Gets called after a ufunc. Needs additional handling as
        PeriodIndex stores internal data as int dtype

        Replace this to __numpy_ufunc__ in future version
        """
        if isinstance(context, tuple) and len(context) > 0:
            func = context[0]
            if (func is np.add):
                pass
            elif (func is np.subtract):
                name = self.name
                left = context[1][0]
                right = context[1][1]
                if (isinstance(left, PeriodIndex)
                        and isinstance(right, PeriodIndex)):
                    name = left.name if left.name == right.name else None
                    return Index(result, name=name)
                elif isinstance(left, Period) or isinstance(right, Period):
                    return Index(result, name=name)
            elif isinstance(func, np.ufunc):
                if 'M->M' not in func.types:
                    msg = "ufunc '{0}' not supported for the PeriodIndex"
                    # This should be TypeError, but TypeError cannot be raised
                    # from here because numpy catches.
                    raise ValueError(msg.format(func.__name__))

        if is_bool_dtype(result):
            return result
        # the result is object dtype array of Period
        # cannot pass _simple_new as it is
        return PeriodIndex(result, freq=self.freq, name=self.name)
コード例 #2
0
ファイル: period.py プロジェクト: DT021/wau
 def astype(self, dtype):
     dtype = np.dtype(dtype)
     if dtype == np.object_:
         return Index(np.array(list(self), dtype), dtype)
     elif dtype == _INT64_DTYPE:
         return Index(self.values, dtype)
     raise ValueError('Cannot cast PeriodIndex to dtype %s' % dtype)
コード例 #3
0
ファイル: period.py プロジェクト: DGrady/pandas
    def get_loc(self, key, method=None, tolerance=None):
        """
        Get integer location for requested label

        Returns
        -------
        loc : int
        """
        try:
            return self._engine.get_loc(key)
        except KeyError:
            if is_integer(key):
                raise

            try:
                asdt, parsed, reso = parse_time_string(key, self.freq)
                key = asdt
            except TypeError:
                pass

            try:
                key = Period(key, freq=self.freq)
            except ValueError:
                # we cannot construct the Period
                # as we have an invalid type
                raise KeyError(key)

            try:
                ordinal = tslib.iNaT if key is tslib.NaT else key.ordinal
                return Index.get_loc(self, ordinal, method, tolerance)
            except KeyError:
                raise KeyError(key)
コード例 #4
0
ファイル: period.py プロジェクト: wjt/pandas
    def get_loc(self, key, method=None, tolerance=None):
        """
        Get integer location for requested label

        Returns
        -------
        loc : int
        """
        try:
            return self._engine.get_loc(key)
        except KeyError:
            if is_integer(key):
                raise

            try:
                asdt, parsed, reso = parse_time_string(key, self.freq)
                key = asdt
            except TypeError:
                pass

            try:
                key = Period(key, freq=self.freq)
            except ValueError:
                # we cannot construct the Period
                # as we have an invalid type
                return self._invalid_indexer('label', key)
            try:
                return Index.get_loc(self, key.ordinal, method, tolerance)
            except KeyError:
                raise KeyError(key)
コード例 #5
0
ファイル: period.py プロジェクト: DT021/wau
    def get_loc(self, key, method=None):
        """
        Get integer location for requested label

        Returns
        -------
        loc : int
        """
        try:
            return self._engine.get_loc(key)
        except KeyError:
            if is_integer(key):
                raise

            try:
                asdt, parsed, reso = parse_time_string(key, self.freq)
                key = asdt
            except TypeError:
                pass

            key = Period(key, self.freq)
            try:
                return Index.get_loc(self, key.ordinal, method=method)
            except KeyError:
                raise KeyError(key)
コード例 #6
0
ファイル: period.py プロジェクト: Arthurkorn/pandas
    def get_loc(self, key, method=None):
        """
        Get integer location for requested label

        Returns
        -------
        loc : int
        """
        try:
            return self._engine.get_loc(key)
        except KeyError:
            if is_integer(key):
                raise

            try:
                asdt, parsed, reso = parse_time_string(key, self.freq)
                key = asdt
            except TypeError:
                pass

            key = Period(key, self.freq)
            try:
                return Index.get_loc(self, key.ordinal, method=method)
            except KeyError:
                raise KeyError(key)
コード例 #7
0
 def astype(self, dtype, copy=True):
     dtype = np.dtype(dtype)
     if is_object_dtype(dtype):
         return self.asobject
     elif is_integer_dtype(dtype):
         return Index(self.values.astype('i8', copy=copy), name=self.name,
                      dtype='i8')
     raise ValueError('Cannot cast PeriodIndex to dtype %s' % dtype)
コード例 #8
0
    def _sub_period(self, other):
        if self.freq != other.freq:
            msg = _DIFFERENT_FREQ_INDEX.format(self.freqstr, other.freqstr)
            raise IncompatibleFrequency(msg)

        asi8 = self.asi8
        new_data = asi8 - other.ordinal

        if self.hasnans:
            new_data = new_data.astype(np.float64)
            new_data[self._isnan] = np.nan
        # result must be Int64Index or Float64Index
        return Index(new_data, name=self.name)
コード例 #9
0
ファイル: period.py プロジェクト: clwater/lesson_python
    def get_indexer(self, target, method=None, limit=None, tolerance=None):
        target = _ensure_index(target)

        if hasattr(target, 'freq') and target.freq != self.freq:
            msg = _DIFFERENT_FREQ_INDEX.format(self.freqstr, target.freqstr)
            raise IncompatibleFrequency(msg)

        if isinstance(target, PeriodIndex):
            target = target.asi8

        if tolerance is not None:
            tolerance = self._convert_tolerance(tolerance)
        return Index.get_indexer(self._int64index, target, method,
                                 limit, tolerance)
コード例 #10
0
ファイル: period.py プロジェクト: smoofra/pandas
 def astype(self, dtype, copy=True, how='start'):
     dtype = pandas_dtype(dtype)
     if is_object_dtype(dtype):
         return self.asobject
     elif is_integer_dtype(dtype):
         return Index(self.values.astype('i8', copy=copy), name=self.name,
                      dtype='i8')
     elif is_datetime64_dtype(dtype):
         return self.to_timestamp(how=how)
     elif is_datetime64tz_dtype(dtype):
         return self.to_timestamp(how=how).tz_localize(dtype.tz)
     elif is_period_dtype(dtype):
         return self.asfreq(freq=dtype.freq)
     raise ValueError('Cannot cast PeriodIndex to dtype %s' % dtype)
コード例 #11
0
    def get_indexer(self, target, method=None, limit=None, tolerance=None):
        target = _ensure_index(target)

        if hasattr(target, 'freq') and target.freq != self.freq:
            msg = _DIFFERENT_FREQ_INDEX.format(self.freqstr, target.freqstr)
            raise IncompatibleFrequency(msg)

        if isinstance(target, PeriodIndex):
            target = target.asi8

        if tolerance is not None:
            tolerance = self._convert_tolerance(tolerance)
        return Index.get_indexer(self._int64index, target, method, limit,
                                 tolerance)
コード例 #12
0
ファイル: period.py プロジェクト: SKNIRBHAY/TechWise-1
    def _sub_period(self, other):
        if self.freq != other.freq:
            msg = _DIFFERENT_FREQ_INDEX.format(self.freqstr, other.freqstr)
            raise IncompatibleFrequency(msg)

        if other.ordinal == tslib.iNaT:
            new_data = np.empty(len(self))
            new_data.fill(np.nan)
        else:
            asi8 = self.asi8
            new_data = asi8 - other.ordinal

            if self.hasnans:
                mask = asi8 == tslib.iNaT
                new_data = new_data.astype(np.float64)
                new_data[mask] = np.nan
        # result must be Int64Index or Float64Index
        return Index(new_data, name=self.name)
コード例 #13
0
ファイル: period.py プロジェクト: DT021/wau
    def append(self, other):
        """
        Append a collection of Index options together

        Parameters
        ----------
        other : Index or list/tuple of indices

        Returns
        -------
        appended : Index
        """
        name = self.name
        to_concat = [self]

        if isinstance(other, (list, tuple)):
            to_concat = to_concat + list(other)
        else:
            to_concat.append(other)

        for obj in to_concat:
            if isinstance(obj, Index) and obj.name != name:
                name = None
                break

        to_concat = self._ensure_compat_concat(to_concat)

        if isinstance(to_concat[0], PeriodIndex):
            if len(set([x.freq for x in to_concat])) > 1:
                # box
                to_concat = [x.asobject.values for x in to_concat]
            else:
                cat_values = np.concatenate([x.values for x in to_concat])
                return PeriodIndex(cat_values, freq=self.freq, name=name)

        to_concat = [
            x.values if isinstance(x, Index) else x for x in to_concat
        ]
        return Index(com._concat_compat(to_concat), name=name)
コード例 #14
0
ファイル: period.py プロジェクト: troglotit/pandas
 def get_indexer(self, target, method=None, limit=None, tolerance=None):
     if hasattr(target, "freq") and target.freq != self.freq:
         raise ValueError("target and index have different freq: " "(%s, %s)" % (target.freq, self.freq))
     return Index.get_indexer(self, target, method, limit, tolerance)
コード例 #15
0
ファイル: period.py プロジェクト: wakamori/pandas
 def f(self):
     base, mult = _gfc(self.freq)
     result = get_period_field_arr(alias, self._values, base)
     return Index(result, name=self.name)
コード例 #16
0
ファイル: period.py プロジェクト: smoofra/pandas
 def get_indexer(self, target, method=None, limit=None, tolerance=None):
     if hasattr(target, 'freq') and target.freq != self.freq:
         msg = _DIFFERENT_FREQ_INDEX.format(self.freqstr, target.freqstr)
         raise IncompatibleFrequency(msg)
     return Index.get_indexer(self, target, method, limit, tolerance)
コード例 #17
0
ファイル: period.py プロジェクト: DT021/wau
 def get_indexer(self, target, method=None, limit=None):
     if hasattr(target, 'freq') and target.freq != self.freq:
         raise ValueError('target and index have different freq: '
                          '(%s, %s)' % (target.freq, self.freq))
     return Index.get_indexer(self, target, method, limit)
コード例 #18
0
 def asobject(self):
     return Index(self._box_values(self.values), dtype=object)
コード例 #19
0
ファイル: period.py プロジェクト: Arthurkorn/pandas
 def get_indexer(self, target, method=None, limit=None):
     if hasattr(target, 'freq') and target.freq != self.freq:
         raise ValueError('target and index have different freq: '
                          '(%s, %s)' % (target.freq, self.freq))
     return Index.get_indexer(self, target, method, limit)
コード例 #20
0
ファイル: period.py プロジェクト: DGrady/pandas
 def get_indexer(self, target, method=None, limit=None, tolerance=None):
     if hasattr(target, 'freq') and target.freq != self.freq:
         msg = _DIFFERENT_FREQ_INDEX.format(self.freqstr, target.freqstr)
         raise IncompatibleFrequency(msg)
     return Index.get_indexer(self, target, method, limit, tolerance)
コード例 #21
0
ファイル: period.py プロジェクト: while/pandas
 def asobject(self):
     from pandas.core.index import Index
     return Index(self._box_values(self.values), dtype=object)