def __init__(self, data=None, start=None, end=None, periods=None, freq='D', index=None): if index is None: if not data is None: if isinstance(data, MIArray): data = data.aslist() self.data = data if isinstance(data[0], datetime.datetime): self._index = MIDateTimeIndex(miutil.jdate(data)) else: self._index = MIDateTimeIndex(data) else: if start is None: self._index = MIDateTimeIndex(periods, end, freq) elif end is None: self._index = MIDateTimeIndex(start, periods, freq) else: self._index = MIDateTimeIndex(start, end, freq) self.data = miutil.pydate(list(self._index.getDateValues())) else: self._index = index self.data = miutil.pydate(list(self._index.getDateValues()))
def gettimes(self): ''' Get time list. ''' tt = self.dataset.getDataInfo().getTimes() times = [] for t in tt: times.append(miutil.pydate(t)) return times
def gettime(self, idx): ''' Get time by index. :param idx: (*int*) Time index. :returns: (*datetime*) The time ''' t = self.dataset.getDataInfo().getTimes().get(idx) t = miutil.pydate(t) return t
def getvalue(self, row, col): ''' Return a value in the table. :param row: (*int*) Row index. :param col: (*int*) Column index. :returns: The value at the row and column. ''' r = self.data.getValue(row, col) if isinstance(r, Date): r = miutil.pydate(r) return r
def cellvalue(self, fieldname, shapeindex): ''' Get attribute table cell value. :param fieldname: (*string*) Field name. :param shapeindex: (*int*) Shape index. :returns: The value in attribute table identified by field name and shape index. ''' v = self.layer.getCellValue(fieldname, shapeindex) if isinstance(v, LocalDateTime): dt = miutil.pydate(v) return dt else: return v
def get_values(self): if isinstance(self._data[0], Date): return miutil.pydate(self._data.aslist()) else: return self._data
def __getitem__(self, key): if isinstance(key, basestring): coldata = self.data.getColumnData(key) if coldata.getDataType().isNumeric(): return NDArray(ArrayUtil.array(coldata.getDataValues())) elif coldata.getDataType() == DataType.DATE: vv = coldata.getData() r = [] for v in vv: dt = miutil.pydate(v) r.append(dt) return r else: return NDArray(ArrayUtil.array(coldata.getData())) hascolkey = True if isinstance(key, tuple): ridx = key[0] cidx = key[1] if isinstance(ridx, int) and isinstance(cidx, int): if ridx < 0: ridx = self.shape[0] + ridx if cidx < 0: cidx = self.shape[1] + cidx return self.data.getValue(ridx, cidx) elif isinstance(ridx, int) and isinstance(cidx, basestring): if ridx < 0: ridx = self.shape[0] + ridx return self.data.getValue(ridx, cidx) else: key = (key, slice(None)) hascolkey = False k = key[0] if isinstance(k, int): sidx = k if sidx < 0: sidx = self.shape[0] + sidx eidx = sidx + 1 step = 1 rowkey = Range(sidx, eidx, step) elif isinstance(k, slice): if isinstance(k.start, basestring): t = miutil.str2date(k.start) t = miutil.jdate(t) sidx = self.data.getTimeIndex(t) if sidx < 0: sidx = 0 else: sidx = 0 if k.start is None else k.start if sidx < 0: sidx = self.shape[0] + sidx if isinstance(k.stop, basestring): t = miutil.str2date(k.stop) t = miutil.jdate(t) eidx = self.data.getTimeIndex(t) + 1 if eidx < 0: eidx = self.shape[0] else: eidx = self.shape[0] if k.stop is None else k.stop if eidx < 0: eidx = self.shape[0] + eidx step = 1 if k.step is None else k.step rowkey = Range(sidx, eidx, step) elif isinstance(k, list): if isinstance(k[0], basestring): tlist = [] for tstr in k: t = miutil.jdate(miutil.str2date(tstr)) idx = self.data.getTimeIndex_Ex(t) if idx >= 0: tlist.append(idx) rowkey = tlist else: rowkey = k else: return None tcolname = self.data.getTimeColName() if not hascolkey: r = self.data.select(rowkey) if r.findColumn(tcolname) is None: r = TableData(r) else: r = TimeTableData(r, tcolname) return PyTableData(r) k = key[1] if isinstance(k, int): sidx = k if sidx < 0: sidx = self.shape[1] + sidx eidx = sidx + 1 step = 1 colkey = Range(sidx, eidx, step) elif isinstance(k, slice): sidx = 0 if k.start is None else k.start if sidx < 0: sidx = self.shape[1] + sidx eidx = self.shape[1] if k.stop is None else k.stop if eidx < 0: eidx = self.shape[1] + eidx step = 1 if k.step is None else k.step colkey = Range(sidx, eidx, step) elif isinstance(k, list): if isinstance(k[0], basestring): cols = self.data.findColumns(k) else: cols = self.data.findColumns_Index(k) colkey = cols elif isinstance(k, basestring): rows = self.data.getRows(rowkey) coldata = self.data.getColumnData(rows, k) if coldata.getDataType().isNumeric(): return NDArray(ArrayUtil.array(coldata.getDataValues())) else: return NDArray(ArrayUtil.array(coldata.getData())) else: return None r = self.data.select(rowkey, colkey) if r.findColumn(tcolname) is None: r = TableData(r) else: r = TimeTableData(r, tcolname) return PyTableData(r)