def set(self, item, value): """ Modify Block in-place with new item value Returns ------- None """ loc = self.items.get_loc(item) if value.dtype != _NS_DTYPE: value = tslib.cast_to_nanoseconds(value) self.values[loc] = value
def __init__(self, values, items, ref_items, ndim=2): if values.dtype != _NS_DTYPE: values = tslib.cast_to_nanoseconds(values) Block.__init__(self, values, items, ref_items, ndim=ndim)
def form_blocks(arrays, names, axes): # pre-filter out items if we passed it items = axes[0] if len(arrays) < len(items): extra_items = items - Index(names) else: extra_items = [] # put "leftover" items in float bucket, where else? # generalize? float_items = [] complex_items = [] int_items = [] bool_items = [] object_items = [] datetime_items = [] for k, v in zip(names, arrays): if issubclass(v.dtype.type, np.floating): float_items.append((k, v)) elif issubclass(v.dtype.type, np.complexfloating): complex_items.append((k, v)) elif issubclass(v.dtype.type, np.datetime64): if v.dtype != _NS_DTYPE: v = tslib.cast_to_nanoseconds(v) if hasattr(v, 'tz') and v.tz is not None: object_items.append((k, v)) else: datetime_items.append((k, v)) elif issubclass(v.dtype.type, np.integer): if v.dtype == np.uint64: # HACK #2355 definite overflow if (v > 2**63 - 1).any(): object_items.append((k, v)) continue int_items.append((k, v)) elif v.dtype == np.bool_: bool_items.append((k, v)) else: object_items.append((k, v)) blocks = [] if len(float_items): float_block = _simple_blockify(float_items, items, np.float64) blocks.append(float_block) if len(complex_items): complex_block = _simple_blockify(complex_items, items, np.complex128) blocks.append(complex_block) if len(int_items): int_block = _simple_blockify(int_items, items, np.int64) blocks.append(int_block) if len(datetime_items): datetime_block = _simple_blockify(datetime_items, items, _NS_DTYPE) blocks.append(datetime_block) if len(bool_items): bool_block = _simple_blockify(bool_items, items, np.bool_) blocks.append(bool_block) if len(object_items) > 0: object_block = _simple_blockify(object_items, items, np.object_) blocks.append(object_block) if len(extra_items): shape = (len(extra_items),) + tuple(len(x) for x in axes[1:]) # empty items -> dtype object block_values = np.empty(shape, dtype=object) block_values.fill(nan) na_block = make_block(block_values, extra_items, items) blocks.append(na_block) blocks = _consolidate(blocks, items) return blocks
def form_blocks(arrays, names, axes): # pre-filter out items if we passed it items = axes[0] if len(arrays) < len(items): extra_items = items - Index(names) else: extra_items = [] # put "leftover" items in float bucket, where else? # generalize? float_items = [] complex_items = [] int_items = [] bool_items = [] object_items = [] datetime_items = [] for k, v in zip(names, arrays): if issubclass(v.dtype.type, np.floating): float_items.append((k, v)) elif issubclass(v.dtype.type, np.complexfloating): complex_items.append((k, v)) elif issubclass(v.dtype.type, np.datetime64): if v.dtype != _NS_DTYPE: v = tslib.cast_to_nanoseconds(v) if hasattr(v, 'tz') and v.tz is not None: object_items.append((k, v)) else: datetime_items.append((k, v)) elif issubclass(v.dtype.type, np.integer): if v.dtype == np.uint64: # HACK #2355 definite overflow if (v > 2**63 - 1).any(): object_items.append((k, v)) continue int_items.append((k, v)) elif v.dtype == np.bool_: bool_items.append((k, v)) else: object_items.append((k, v)) blocks = [] if len(float_items): float_block = _simple_blockify(float_items, items, np.float64) blocks.append(float_block) if len(complex_items): complex_block = _simple_blockify(complex_items, items, np.complex128) blocks.append(complex_block) if len(int_items): int_block = _simple_blockify(int_items, items, np.int64) blocks.append(int_block) if len(datetime_items): datetime_block = _simple_blockify(datetime_items, items, _NS_DTYPE) blocks.append(datetime_block) if len(bool_items): bool_block = _simple_blockify(bool_items, items, np.bool_) blocks.append(bool_block) if len(object_items) > 0: object_block = _simple_blockify(object_items, items, np.object_) blocks.append(object_block) if len(extra_items): shape = (len(extra_items), ) + tuple(len(x) for x in axes[1:]) # empty items -> dtype object block_values = np.empty(shape, dtype=object) block_values.fill(nan) na_block = make_block(block_values, extra_items, items) blocks.append(na_block) blocks = _consolidate(blocks, items) return blocks
def test_index_cast_datetime64_other_units(self): arr = np.arange(0, 100, 10, dtype=np.int64).view('M8[D]') idx = Index(arr) self.assertTrue((idx.values == tslib.cast_to_nanoseconds(arr)).all())