コード例 #1
0
ファイル: timedeltas.py プロジェクト: engstrom/pandas
def _coerce_scalar_to_timedelta_type(r, unit='ns'):
    # kludgy here until we have a timedelta scalar
    # handle the numpy < 1.7 case

    def conv(v):
        if _np_version_under1p7:
            return timedelta(microseconds=v/1000.0)
        return np.timedelta64(v)

    if isinstance(r, compat.string_types):
        converter = _get_string_converter(r, unit=unit)
        r = converter()
        r = conv(r)
    elif r == tslib.iNaT:
        return r
    elif isinstance(r, np.timedelta64):
        r = r.astype("m8[{0}]".format(unit.lower()))
    elif is_integer(r):
        r = tslib.cast_from_unit(r, unit)
        r = conv(r)

    if _np_version_under1p7:
        if not isinstance(r, timedelta):
            raise AssertionError("Invalid type for timedelta scalar: %s" % type(r))
        if compat.PY3:
            # convert to microseconds in timedelta64
            r = np.timedelta64(int(r.total_seconds()*1e9 + r.microseconds*1000))
        else:
            return r

    if isinstance(r, timedelta):
        r = np.timedelta64(r)
    elif not isinstance(r, np.timedelta64):
        raise AssertionError("Invalid type for timedelta scalar: %s" % type(r))
    return r.astype('timedelta64[ns]')
コード例 #2
0
ファイル: timedeltas.py プロジェクト: FedericoCeratto/pandas
        def convert(r=None, unit=None, m=m):
            if r is not None:
                m = _full_search.search(r)

            gd = m.groupdict()

            # handle time
            value = 0
            time = gd['time']
            if time:
                (hh,mm,ss) = time.split(':')
                value += int((float(hh)*3600 + float(mm)*60 + float(ss))*1e9)

            # handle frac
            frac = gd['frac']
            if frac:
                value += round(float(frac)*1e9)

            # handle days (possibly negative)
            is_neg = gd['neg']
            if gd['days']:
                days = int((float(gd['days'] or 0) * 86400)*1e9)
                if gd['neg']:
                    days *= -1
                value += days
            else:
                if gd['neg']:
                    value *= -1

            return tslib.cast_from_unit(value, 'ns')
コード例 #3
0
ファイル: timedeltas.py プロジェクト: FedericoCeratto/pandas
        def convert(r=None, unit=None, m=m):
            if r is not None:
                m = _full_search2.search(r)

            gd = m.groupdict()

            # the parser
            def parse(k, v):
                if v is None:
                    return 0
                v = float(_number_split.search(v).group())
                return int(v*_unit_scale[k])

            # handle non-days
            days = gd.pop('days',None)
            neg = gd.pop('neg',None)
            value = 0
            for k, v in gd.items():
                value += parse(k,v)

            # parse days / neg
            if days:
                days = parse('days',days)
                if neg:
                    days *= -1
                value += days
            else:
                if neg:
                    value *= -1

            return tslib.cast_from_unit(value, 'ns')
コード例 #4
0
        def convert(r=None, unit=None, m=m):
            if r is not None:
                m = _full_search2.search(r)

            gd = m.groupdict()

            # the parser
            def parse(k, v):
                if v is None:
                    return 0
                v = float(_number_split.search(v).group())
                return int(v * _unit_scale[k])

            # handle non-days
            days = gd.pop('days', None)
            neg = gd.pop('neg', None)
            value = 0
            for k, v in gd.items():
                value += parse(k, v)

            # parse days / neg
            if days:
                days = parse('days', days)
                if neg:
                    days *= -1
                value += days
            else:
                if neg:
                    value *= -1

            return tslib.cast_from_unit(value, 'ns')
コード例 #5
0
        def convert(r=None, unit=None, m=m):
            if r is not None:
                m = _full_search.search(r)

            gd = m.groupdict()

            # handle time
            value = 0
            time = gd['time']
            if time:
                (hh, mm, ss) = time.split(':')
                value += int(
                    (float(hh) * 3600 + float(mm) * 60 + float(ss)) * 1e9)

            # handle frac
            frac = gd['frac']
            if frac:
                value += round(float(frac) * 1e9)

            # handle days (possibly negative)
            is_neg = gd['neg']
            if gd['days']:
                days = int((float(gd['days'] or 0) * 86400) * 1e9)
                if gd['neg']:
                    days *= -1
                value += days
            else:
                if gd['neg']:
                    value *= -1

            return tslib.cast_from_unit(value, 'ns')
コード例 #6
0
def _coerce_scalar_to_timedelta_type(r, unit='ns'):
    # kludgy here until we have a timedelta scalar
    # handle the numpy < 1.7 case

    def conv(v):
        if _np_version_under1p7:
            return timedelta(microseconds=v/1000.0)
        return np.timedelta64(v)

    if isinstance(r, compat.string_types):
        converter = _get_string_converter(r, unit=unit)
        r = converter()
        r = conv(r)
    elif r == tslib.iNaT:
        return r
    elif isinstance(r, np.timedelta64):
        r = r.astype("m8[{0}]".format(unit.lower()))
    elif is_integer(r):
        r = tslib.cast_from_unit(r, unit)
        r = conv(r)

    if _np_version_under1p7:
        if not isinstance(r, timedelta):
            raise AssertionError("Invalid type for timedelta scalar: %s" % type(r))
        if compat.PY3:
            # convert to microseconds in timedelta64
            r = np.timedelta64(int(r.total_seconds()*1e9 + r.microseconds*1000))
        else:
            return r

    if isinstance(r, timedelta):
        r = np.timedelta64(r)
    elif not isinstance(r, np.timedelta64):
        raise AssertionError("Invalid type for timedelta scalar: %s" % type(r))
    return r.astype('timedelta64[ns]')
コード例 #7
0
ファイル: timedeltas.py プロジェクト: engstrom/pandas
        def convert(r=None, unit=unit, m=m):
            if r is not None:
                m = _short_search.search(r)

            gd = m.groupdict()

            r = float(gd['value'])
            u = gd.get('unit')
            if u is not None:
                unit = u.lower()
            if gd['neg']:
                r *= -1
            return tslib.cast_from_unit(r, unit)
コード例 #8
0
ファイル: timedeltas.py プロジェクト: pannpers/pandas
        def convert(r=None, unit=unit, m=m):
            if r is not None:
                m = _short_search.search(r)

            gd = m.groupdict()

            r = float(gd['value'])
            u = gd.get('unit')
            if u is not None:
                unit = u.lower()
            if gd['neg']:
                r *= -1
            return tslib.cast_from_unit(r, unit)
コード例 #9
0
ファイル: timedeltas.py プロジェクト: engstrom/pandas
        def convert(r=None, unit=None, m=m):
            if r is not None:
                m = _full_search.search(r)

            gd = m.groupdict()

            # convert to seconds
            value = float(gd['days'] or 0) * 86400

            time = gd['time']
            if time:
                (hh,mm,ss) = time.split(':')
                value += float(hh)*3600 + float(mm)*60 + float(ss)

            frac = gd['frac']
            if frac:
                value += float(frac)

            if gd['neg']:
                value *= -1
            return tslib.cast_from_unit(value, 's')
コード例 #10
0
ファイル: timedeltas.py プロジェクト: pannpers/pandas
        def convert(r=None, unit=None, m=m):
            if r is not None:
                m = _full_search.search(r)

            gd = m.groupdict()

            # convert to seconds
            value = float(gd['days'] or 0) * 86400

            time = gd['time']
            if time:
                (hh, mm, ss) = time.split(':')
                value += float(hh) * 3600 + float(mm) * 60 + float(ss)

            frac = gd['frac']
            if frac:
                value += float(frac)

            if gd['neg']:
                value *= -1
            return tslib.cast_from_unit(value, 's')