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
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)
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)
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
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