def _setitem_loc(self, key, value): if isinstance(value, datetime.datetime): value = [miutil.jdatetime(value)] if isinstance(value, (list, tuple)): if isinstance(value[0], datetime.datetime): value = miutil.jdatetime(value) #value = np.array(value) if isinstance(value, np.NDArray): value = value._array self._dataframe.setRow(key, value)
def __getitem__(self, key): if isinstance(key, Index): key = key.data elif isinstance(key, datetime.datetime): key = miutil.jdatetime(key) if isinstance(key, int): if key < 0 or key >= self.__len__(): raise KeyError(key) return self._series.getValue(key) elif isinstance(key, (list, tuple, MIArray)): if isinstance(key, MIArray): key = key.aslist() if isinstance(key[0], datetime.datetime): key = miutil.jdatetime(key) if isinstance(key[0], int): r = self._series.getValues(key) else: r = self._series.getValueByIndex(key) return Series(series=r) elif isinstance(key, slice): if isinstance(key.start, basestring): sidx = self._index.index(key.start) if sidx < 0: sidx = 0 else: sidx = 0 if key.start is None else key.start if sidx < 0: sidx = self.__len__() + sidx if isinstance(key.stop, basestring): eidx = self._index.index(key.stop) if eidx < 0: eidx = self.__len__() else: eidx = self.__len__() - 1 if key.stop is None else key.stop - 1 if eidx < 0: eidx = self.__len__() + eidx step = 1 if key.step is None else key.step rowkey = Range(sidx, eidx, step) r = self._series.getValues(rowkey) return Series(series=r) else: r = self._series.getValueByIndex(key) if isinstance(r, MISeries): return Series(series=r) else: return r
def insert(self, loc, column, value): ''' Insert column into DataFrame at specified location. :param loc: (*int*) Insertation index. :param column: (*string*) Label of inserted column. :param value: (*array_like*) Column values. ''' if isinstance(value, datetime.datetime): value = miutil.jdatetime(value) if isinstance(value, (list, tuple)): if isinstance(value[0], datetime.datetime): value = miutil.jdatetime(value) value = minum.array(value) if isinstance(value, MIArray): value = value.array self._dataframe.addColumn(loc, column, value)
def get_loc(self, key, outkeys=False): ''' Get integer location, slice or boolean mask for requested label. :param key: (*string or list*) Label. :param outkeys: (*boolean*) If return location keys or not. :returns: int if unique index, slice if monotonic index, else mask. ''' if isinstance(key, datetime.datetime): key = miutil.jdatetime(key) elif isinstance(key, (list, tuple)) and isinstance(key[0], datetime.datetime): key = miutil.jdatetime(key) r = self._index.getIndices(key) if outkeys: return list(r[0]), list(r[1]) else: return list(r[0])
def get_loc(self, key, outkeys=False): ''' Get integer location, slice or boolean mask for requested label. :param key: (*string or list*) Label. :param outkeys: (*boolean*) If return location keys or not. :returns: int if unique index, slice if monotonic index, else mask. ''' if isinstance(key, datetime.datetime): key = miutil.jdatetime(key) elif isinstance(key, (list, tuple, MIArray)) and isinstance(key[0], datetime.datetime): key = miutil.jdatetime(key) r = self._index.getIndices(key) if outkeys: return list(r[0]), list(r[1]) else: return list(r[0])
def index(self, v): ''' Get index of a value. :param v: (*datetime or string*) Date time value :returns: (*int*) Value index ''' if isinstance(v, datetime.datetime): v = miutil.jdatetime(v) else: v = miutil.str2jdate(v) return self._index.indexOf(v)
def __setitem__(self, key, value): if isinstance(value, datetime.datetime): value = miutil.jdatetime(value) if isinstance(value, (list, tuple)): if isinstance(value[0], datetime.datetime): value = miutil.jdatetime(value) value = np.array(value) if isinstance(value, np.NDArray): value = value._array if isinstance(key, basestring): if isinstance(value, series.Series): value = value.values._array self._dataframe.setColumn(key, value) return 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 self._dataframe.setValue(ridx, cidx, value) return elif isinstance(ridx, int) and isinstance(cidx, basestring): if ridx < 0: ridx = self.shape[0] + ridx self._dataframe.setValue(ridx, cidx, value) return else: key = (key, slice(None)) hascolkey = False k = key[0] if isinstance(k, int): if k < 0: k = self.shape[0] + k rowkey = k elif isinstance(k, basestring): sidx = self._index.index(k) if sidx < 0: return None eidx = sidx step = 1 rowkey = Range(sidx, eidx, step) elif isinstance(k, slice): if isinstance(k.start, basestring): sidx = self._index.index(k.start) 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): eidx = self._index.index(k.stop) if eidx < 0: eidx = self.shape[0] + eidx else: eidx = self.shape[0] - 1 if k.stop is None else k.stop - 1 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], int): rowkey = k else: tlist = [] for tstr in k: idx = self._index.index(tstr) if idx >= 0: tlist.append(idx) rowkey = tlist else: return if not hascolkey: colkey = Range(0, self.shape[1] - 1, 1) else: k = key[1] if isinstance(k, int): sidx = k if sidx < 0: sidx = self.shape[1] + sidx eidx = sidx 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] - 1 if k.stop is None else k.stop - 1 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], int): colkey = k else: colkey = self.columns.indexOfName(k) elif isinstance(k, basestring): col = self.columns.indexOf(k) colkey = Range(col, col + 1, 1) else: return self._dataframe.setValues(rowkey, colkey, value)
def __setitem__(self, key, value): if isinstance(value, datetime.datetime): value = miutil.jdatetime(value) if isinstance(value, (list, tuple)): if isinstance(value[0], datetime.datetime): value = miutil.jdatetime(value) value = minum.array(value) if isinstance(value, MIArray): value = value.array if isinstance(key, basestring): if isinstance(value, series.Series): value = value.values.array self._dataframe.setColumn(key, value) return 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 self._dataframe.setValue(ridx, cidx, value) return elif isinstance(ridx, int) and isinstance(cidx, basestring): if ridx < 0: ridx = self.shape[0] + ridx self._dataframe.setValue(ridx, cidx, value) return else: key = (key, slice(None)) hascolkey = False k = key[0] if isinstance(k, int): if k < 0: k = self.shape[0] + k rowkey = k elif isinstance(k, basestring): sidx = self._index.index(k) if sidx < 0: return None eidx = sidx step = 1 rowkey = Range(sidx, eidx, step) elif isinstance(k, slice): if isinstance(k.start, basestring): sidx = self._index.index(k.start) 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): eidx = self._index.index(k.stop) if eidx < 0: eidx = self.shape[0] + eidx else: eidx = self.shape[0] - 1 if k.stop is None else k.stop - 1 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], int): rowkey = k else: tlist = [] for tstr in k: idx = self._index.index(tstr) if idx >= 0: tlist.append(idx) rowkey = tlist else: return if not hascolkey: colkey = Range(0, self.shape[1] - 1, 1) else: k = key[1] if isinstance(k, int): sidx = k if sidx < 0: sidx = self.shape[1] + sidx eidx = sidx 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] - 1 if k.stop is None else k.stop - 1 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], int): colkey = k else: colkey = self.columns.indexOfName(k) elif isinstance(k, basestring): col = self.columns.indexOf(k) colkey = Range(col, col + 1, 1) else: return self._dataframe.setValues(rowkey, colkey, value)