def _convert_listlike(arg, box, unit): if isinstance(arg, (list,tuple)) or ((hasattr(arg,'__iter__') and not hasattr(arg,'dtype'))): arg = np.array(list(arg), dtype='O') if is_timedelta64_dtype(arg): value = arg.astype('timedelta64[ns]') elif is_integer_dtype(arg): # these are shortcutable value = arg.astype('timedelta64[{0}]'.format(unit)).astype('timedelta64[ns]') else: try: value = tslib.array_to_timedelta64(_ensure_object(arg), unit=unit, coerce=coerce) except: # try to process strings fast; may need to fallback try: value = np.array([ _get_string_converter(r, unit=unit)() for r in arg ],dtype='m8[ns]') except: value = np.array([ _coerce_scalar_to_timedelta_type(r, unit=unit, coerce=coerce) for r in arg ]) value = value.astype('timedelta64[ns]', copy=False) if box: from pandas import TimedeltaIndex value = TimedeltaIndex(value,unit='ns') return value
def _convert_listlike(arg, unit='ns', box=True, errors='raise', name=None): """Convert a list of objects to a timedelta index object.""" if isinstance(arg, (list, tuple)) or not hasattr(arg, 'dtype'): arg = np.array(list(arg), dtype='O') # these are shortcut-able if is_timedelta64_dtype(arg): value = arg.astype('timedelta64[ns]') elif is_integer_dtype(arg): value = arg.astype('timedelta64[{0}]'.format( unit)).astype('timedelta64[ns]', copy=False) else: try: value = tslib.array_to_timedelta64(_ensure_object(arg), unit=unit, errors=errors) value = value.astype('timedelta64[ns]', copy=False) except ValueError: if errors == 'ignore': return arg else: # This else-block accounts for the cases when errors='raise' # and errors='coerce'. If errors == 'raise', these errors # should be raised. If errors == 'coerce', we shouldn't # expect any errors to be raised, since all parsing errors # cause coercion to pd.NaT. However, if an error / bug is # introduced that causes an Exception to be raised, we would # like to surface it. raise if box: from pandas import TimedeltaIndex value = TimedeltaIndex(value, unit='ns', name=name) return value
def _convert_listlike(arg, unit='ns', box=True, errors='raise', name=None): """Convert a list of objects to a timedelta index object.""" if isinstance(arg, (list, tuple)) or not hasattr(arg, 'dtype'): arg = np.array(list(arg), dtype='O') # these are shortcut-able if is_timedelta64_dtype(arg): value = arg.astype('timedelta64[ns]') elif is_integer_dtype(arg): value = arg.astype('timedelta64[{0}]'.format(unit)).astype( 'timedelta64[ns]', copy=False) else: try: value = tslib.array_to_timedelta64(_ensure_object(arg), unit=unit, errors=errors) value = value.astype('timedelta64[ns]', copy=False) except ValueError: if errors == 'ignore': return arg else: # This else-block accounts for the cases when errors='raise' # and errors='coerce'. If errors == 'raise', these errors # should be raised. If errors == 'coerce', we shouldn't # expect any errors to be raised, since all parsing errors # cause coercion to pd.NaT. However, if an error / bug is # introduced that causes an Exception to be raised, we would # like to surface it. raise if box: from pandas import TimedeltaIndex value = TimedeltaIndex(value, unit='ns', name=name) return value
def _convert_listlike(arg, box, unit): if isinstance(arg, (list, tuple)): arg = np.array(arg, dtype='O') if is_timedelta64_dtype(arg): value = arg.astype('timedelta64[ns]') elif is_integer_dtype(arg): unit = _validate_timedelta_unit(unit) # these are shortcutable value = arg.astype( 'timedelta64[{0}]'.format(unit)).astype('timedelta64[ns]') else: try: value = tslib.array_to_timedelta64(_ensure_object(arg), unit=unit) except: value = np.array([ _coerce_scalar_to_timedelta_type(r, unit=unit) for r in arg ]) if box: from pandas import Series value = Series(value, dtype='m8[ns]') return value
def _possibly_cast_to_timedelta(value, coerce=True): """ try to cast to timedelta64, if already a timedeltalike, then make sure that we are [ns] (as numpy 1.6.2 is very buggy in this regards, don't force the conversion unless coerce is True if coerce='compat' force a compatibilty coercerion (to timedeltas) if needeed """ # coercion compatability if coerce == 'compat' and _np_version_under1p7: def convert(td, dtype): # we have an array with a non-object dtype if hasattr(td, 'item'): td = td.astype(np.int64).item() if td == tslib.iNaT: return td if dtype == 'm8[us]': td *= 1000 return td if td == tslib.compat_NaT: return tslib.iNaT # convert td value to a nanosecond value d = td.days s = td.seconds us = td.microseconds if dtype == 'object' or dtype == 'm8[ns]': td = 1000 * us + (s + d * 24 * 3600) * 10**9 else: raise ValueError( "invalid conversion of dtype in np < 1.7 [%s]" % dtype) return td # < 1.7 coercion if not is_list_like(value): value = np.array([value]) dtype = value.dtype return np.array([convert(v, dtype) for v in value], dtype='m8[ns]') # deal with numpy not being able to handle certain timedelta operations if isinstance(value, (ABCSeries, np.ndarray)) and value.dtype.kind == 'm': if value.dtype != 'timedelta64[ns]': value = value.astype('timedelta64[ns]') return value # we don't have a timedelta, but we want to try to convert to one (but # don't force it) if coerce: new_value = tslib.array_to_timedelta64( _values_from_object(value).astype(object), coerce=False) if new_value.dtype == 'i8': value = np.array(new_value, dtype='timedelta64[ns]') return value
def _convert_listlike(arg, box, unit): if isinstance(arg, (list, tuple)) or ((hasattr(arg, '__iter__') and not hasattr(arg, 'dtype'))): arg = np.array(list(arg), dtype='O') if is_timedelta64_dtype(arg): value = arg.astype('timedelta64[ns]') elif is_integer_dtype(arg): # these are shortcutable value = arg.astype( 'timedelta64[{0}]'.format(unit)).astype('timedelta64[ns]') else: try: value = tslib.array_to_timedelta64(_ensure_object(arg), unit=unit) except: # try to process strings fast; may need to fallback try: value = np.array( [_get_string_converter(r, unit=unit)() for r in arg], dtype='m8[ns]') except: value = np.array([ _coerce_scalar_to_timedelta_type(r, unit=unit) for r in arg ]) if box: from pandas import TimedeltaIndex value = TimedeltaIndex(value, unit='ns') return value
def _possibly_cast_to_timedelta(value, coerce=True, dtype=None): """ try to cast to timedelta64, if already a timedeltalike, then make sure that we are [ns] (as numpy 1.6.2 is very buggy in this regards, don't force the conversion unless coerce is True if dtype is passed then this is the target dtype """ # deal with numpy not being able to handle certain timedelta operations if isinstance(value, (ABCSeries, np.ndarray)): # i8 conversions if value.dtype == 'int64' and np.dtype(dtype) == 'timedelta64[ns]': value = value.astype('timedelta64[ns]') return value elif value.dtype.kind == 'm': if value.dtype != 'timedelta64[ns]': value = value.astype('timedelta64[ns]') return value # we don't have a timedelta, but we want to try to convert to one (but # don't force it) if coerce: new_value = tslib.array_to_timedelta64( _values_from_object(value).astype(object), coerce=False) if new_value.dtype == 'i8': value = np.array(new_value, dtype='timedelta64[ns]') return value
def _possibly_cast_to_timedelta(value, coerce=True): """ try to cast to timedelta64, if already a timedeltalike, then make sure that we are [ns] (as numpy 1.6.2 is very buggy in this regards, don't force the conversion unless coerce is True if coerce='compat' force a compatibilty coercerion (to timedeltas) if needeed """ # coercion compatability if coerce == 'compat' and _np_version_under1p7: def convert(td, dtype): # we have an array with a non-object dtype if hasattr(td,'item'): td = td.astype(np.int64).item() if td == tslib.iNaT: return td if dtype == 'm8[us]': td *= 1000 return td if td == tslib.compat_NaT: return tslib.iNaT # convert td value to a nanosecond value d = td.days s = td.seconds us = td.microseconds if dtype == 'object' or dtype == 'm8[ns]': td = 1000*us + (s + d * 24 * 3600) * 10 ** 9 else: raise ValueError("invalid conversion of dtype in np < 1.7 [%s]" % dtype) return td # < 1.7 coercion if not is_list_like(value): value = np.array([ value ]) dtype = value.dtype return np.array([ convert(v,dtype) for v in value ], dtype='m8[ns]') # deal with numpy not being able to handle certain timedelta operations if isinstance(value, (ABCSeries, np.ndarray)) and value.dtype.kind == 'm': if value.dtype != 'timedelta64[ns]': value = value.astype('timedelta64[ns]') return value # we don't have a timedelta, but we want to try to convert to one (but # don't force it) if coerce: new_value = tslib.array_to_timedelta64( _values_from_object(value).astype(object), coerce=False) if new_value.dtype == 'i8': value = np.array(new_value, dtype='timedelta64[ns]') return value
def _simple_new(cls, values, name=None, freq=None, **kwargs): values = np.array(values, copy=False) if values.dtype == np.object_: values = tslib.array_to_timedelta64(values) if values.dtype != _TD_DTYPE: values = _ensure_int64(values).view(_TD_DTYPE) result = object.__new__(cls) result._data = values result.name = name result.freq = freq result._reset_identity() return result
def _convert_listlike(arg, box, unit, name=None): if isinstance(arg, (list, tuple)) or not hasattr(arg, 'dtype'): arg = np.array(list(arg), dtype='O') # these are shortcutable if is_timedelta64_dtype(arg): value = arg.astype('timedelta64[ns]') elif is_integer_dtype(arg): value = arg.astype('timedelta64[{0}]'.format(unit)).astype('timedelta64[ns]', copy=False) else: value = tslib.array_to_timedelta64(_ensure_object(arg), unit=unit, errors=errors) value = value.astype('timedelta64[ns]', copy=False) if box: from pandas import TimedeltaIndex value = TimedeltaIndex(value,unit='ns', name=name) return value
def _convert_listlike(arg, box, unit, name=None): if isinstance(arg, (list,tuple)) or ((hasattr(arg,'__iter__') and not hasattr(arg,'dtype'))): arg = np.array(list(arg), dtype='O') # these are shortcutable if is_timedelta64_dtype(arg): value = arg.astype('timedelta64[ns]') elif is_integer_dtype(arg): value = arg.astype('timedelta64[{0}]'.format(unit)).astype('timedelta64[ns]', copy=False) else: value = tslib.array_to_timedelta64(_ensure_object(arg), unit=unit, errors=errors) value = value.astype('timedelta64[ns]', copy=False) if box: from pandas import TimedeltaIndex value = TimedeltaIndex(value,unit='ns', name=name) return value
def _convert_listlike(arg, box, unit): if isinstance(arg, (list, tuple)) or ((hasattr(arg, "__iter__") and not hasattr(arg, "dtype"))): arg = np.array(list(arg), dtype="O") # these are shortcutable if is_timedelta64_dtype(arg): value = arg.astype("timedelta64[ns]") elif is_integer_dtype(arg): value = arg.astype("timedelta64[{0}]".format(unit)).astype("timedelta64[ns]", copy=False) else: value = tslib.array_to_timedelta64(_ensure_object(arg), unit=unit, errors=errors) value = value.astype("timedelta64[ns]", copy=False) if box: from pandas import TimedeltaIndex value = TimedeltaIndex(value, unit="ns") return value
def _convert_listlike(arg, box, unit): if isinstance(arg, (list,tuple)): arg = np.array(arg, dtype='O') if is_timedelta64_dtype(arg): value = arg.astype('timedelta64[ns]') elif is_integer_dtype(arg): # these are shortcutable value = arg.astype('timedelta64[{0}]'.format(unit)).astype('timedelta64[ns]') else: try: value = tslib.array_to_timedelta64(_ensure_object(arg),unit=unit) except: value = np.array([ _coerce_scalar_to_timedelta_type(r, unit=unit) for r in arg ]) if box: from pandas import Series value = Series(value,dtype='m8[ns]') return value