예제 #1
0
    def test_is_datetime_dtypes(self):

        ts = pd.date_range('20130101', periods=3)
        tsa = pd.date_range('20130101', periods=3, tz='US/Eastern')

        self.assertTrue(is_datetime64_dtype('datetime64'))
        self.assertTrue(is_datetime64_dtype('datetime64[ns]'))
        self.assertTrue(is_datetime64_dtype(ts))
        self.assertFalse(is_datetime64_dtype(tsa))

        self.assertFalse(is_datetime64_ns_dtype('datetime64'))
        self.assertTrue(is_datetime64_ns_dtype('datetime64[ns]'))
        self.assertTrue(is_datetime64_ns_dtype(ts))
        self.assertTrue(is_datetime64_ns_dtype(tsa))

        self.assertTrue(is_datetime64_any_dtype('datetime64'))
        self.assertTrue(is_datetime64_any_dtype('datetime64[ns]'))
        self.assertTrue(is_datetime64_any_dtype(ts))
        self.assertTrue(is_datetime64_any_dtype(tsa))

        self.assertFalse(is_datetime64tz_dtype('datetime64'))
        self.assertFalse(is_datetime64tz_dtype('datetime64[ns]'))
        self.assertFalse(is_datetime64tz_dtype(ts))
        self.assertTrue(is_datetime64tz_dtype(tsa))

        for tz in ['US/Eastern', 'UTC']:
            dtype = 'datetime64[ns, {}]'.format(tz)
            self.assertFalse(is_datetime64_dtype(dtype))
            self.assertTrue(is_datetime64tz_dtype(dtype))
            self.assertTrue(is_datetime64_ns_dtype(dtype))
            self.assertTrue(is_datetime64_any_dtype(dtype))
예제 #2
0
    def test_is_datetime_dtypes(self):

        ts = pd.date_range('20130101', periods=3)
        tsa = pd.date_range('20130101', periods=3, tz='US/Eastern')

        self.assertTrue(is_datetime64_dtype('datetime64'))
        self.assertTrue(is_datetime64_dtype('datetime64[ns]'))
        self.assertTrue(is_datetime64_dtype(ts))
        self.assertFalse(is_datetime64_dtype(tsa))

        self.assertFalse(is_datetime64_ns_dtype('datetime64'))
        self.assertTrue(is_datetime64_ns_dtype('datetime64[ns]'))
        self.assertTrue(is_datetime64_ns_dtype(ts))
        self.assertTrue(is_datetime64_ns_dtype(tsa))

        self.assertTrue(is_datetime64_any_dtype('datetime64'))
        self.assertTrue(is_datetime64_any_dtype('datetime64[ns]'))
        self.assertTrue(is_datetime64_any_dtype(ts))
        self.assertTrue(is_datetime64_any_dtype(tsa))

        self.assertFalse(is_datetime64tz_dtype('datetime64'))
        self.assertFalse(is_datetime64tz_dtype('datetime64[ns]'))
        self.assertFalse(is_datetime64tz_dtype(ts))
        self.assertTrue(is_datetime64tz_dtype(tsa))

        for tz in ['US/Eastern', 'UTC']:
            dtype = 'datetime64[ns, {}]'.format(tz)
            self.assertFalse(is_datetime64_dtype(dtype))
            self.assertTrue(is_datetime64tz_dtype(dtype))
            self.assertTrue(is_datetime64_ns_dtype(dtype))
            self.assertTrue(is_datetime64_any_dtype(dtype))
예제 #3
0
 def test_compat(self):
     self.assertTrue(is_datetime64tz_dtype(self.dtype))
     self.assertTrue(is_datetime64tz_dtype('datetime64[ns, US/Eastern]'))
     self.assertTrue(is_datetime64_any_dtype(self.dtype))
     self.assertTrue(is_datetime64_any_dtype('datetime64[ns, US/Eastern]'))
     self.assertTrue(is_datetime64_ns_dtype(self.dtype))
     self.assertTrue(is_datetime64_ns_dtype('datetime64[ns, US/Eastern]'))
     self.assertFalse(is_datetime64_dtype(self.dtype))
     self.assertFalse(is_datetime64_dtype('datetime64[ns, US/Eastern]'))
예제 #4
0
파일: test_dtypes.py 프로젝트: cgrin/pandas
 def test_compat(self):
     self.assertTrue(is_datetime64tz_dtype(self.dtype))
     self.assertTrue(is_datetime64tz_dtype('datetime64[ns, US/Eastern]'))
     self.assertTrue(is_datetime64_any_dtype(self.dtype))
     self.assertTrue(is_datetime64_any_dtype('datetime64[ns, US/Eastern]'))
     self.assertTrue(is_datetime64_ns_dtype(self.dtype))
     self.assertTrue(is_datetime64_ns_dtype('datetime64[ns, US/Eastern]'))
     self.assertFalse(is_datetime64_dtype(self.dtype))
     self.assertFalse(is_datetime64_dtype('datetime64[ns, US/Eastern]'))
예제 #5
0
    def test_to_datetime_tz_psycopg2(self):

        # xref 8260
        try:
            import psycopg2
        except ImportError:
            raise nose.SkipTest("no psycopg2 installed")

        # misc cases
        tz1 = psycopg2.tz.FixedOffsetTimezone(offset=-300, name=None)
        tz2 = psycopg2.tz.FixedOffsetTimezone(offset=-240, name=None)
        arr = np.array([datetime(2000, 1, 1, 3, 0, tzinfo=tz1),
                        datetime(2000, 6, 1, 3, 0, tzinfo=tz2)],
                       dtype=object)

        result = pd.to_datetime(arr, errors='coerce', utc=True)
        expected = DatetimeIndex(['2000-01-01 08:00:00+00:00',
                                  '2000-06-01 07:00:00+00:00'],
                                 dtype='datetime64[ns, UTC]', freq=None)
        tm.assert_index_equal(result, expected)

        # dtype coercion
        i = pd.DatetimeIndex([
            '2000-01-01 08:00:00+00:00'
        ], tz=psycopg2.tz.FixedOffsetTimezone(offset=-300, name=None))
        self.assertTrue(is_datetime64_ns_dtype(i))

        # tz coerceion
        result = pd.to_datetime(i, errors='coerce')
        tm.assert_index_equal(result, i)

        result = pd.to_datetime(i, errors='coerce', utc=True)
        expected = pd.DatetimeIndex(['2000-01-01 13:00:00'],
                                    dtype='datetime64[ns, UTC]')
        tm.assert_index_equal(result, expected)
예제 #6
0
파일: converter.py 프로젝트: cgrin/pandas
def _dt_to_float_ordinal(dt):
    """
    Convert :mod:`datetime` to the Gregorian date as UTC float days,
    preserving hours, minutes, seconds and microseconds.  Return value
    is a :func:`float`.
    """
    if (isinstance(dt, (np.ndarray, Index, Series)
                   ) and is_datetime64_ns_dtype(dt)):
        base = dates.epoch2num(dt.asi8 / 1.0E9)
    else:
        base = dates.date2num(dt)
    return base
예제 #7
0
def _dt_to_float_ordinal(dt):
    """
    Convert :mod:`datetime` to the Gregorian date as UTC float days,
    preserving hours, minutes, seconds and microseconds.  Return value
    is a :func:`float`.
    """
    if (isinstance(dt, (np.ndarray, Index, Series))
            and is_datetime64_ns_dtype(dt)):
        base = dates.epoch2num(dt.asi8 / 1.0E9)
    else:
        base = dates.date2num(dt)
    return base
예제 #8
0
    def _convert_listlike(arg, box, format, name=None, tz=tz):

        if isinstance(arg, (list, tuple)):
            arg = np.array(arg, dtype='O')

        # these are shortcutable
        if is_datetime64_ns_dtype(arg):
            if box and not isinstance(arg, DatetimeIndex):
                try:
                    return DatetimeIndex(arg, tz=tz, name=name)
                except ValueError:
                    pass

            return arg

        elif is_datetime64tz_dtype(arg):
            if not isinstance(arg, DatetimeIndex):
                return DatetimeIndex(arg, tz=tz, name=name)
            if utc:
                arg = arg.tz_convert(None).tz_localize('UTC')
            return arg

        elif unit is not None:
            if format is not None:
                raise ValueError("cannot specify both format and unit")
            arg = getattr(arg, 'values', arg)
            result = tslib.array_with_unit_to_datetime(arg, unit,
                                                       errors=errors)
            if box:
                if errors == 'ignore':
                    from pandas import Index
                    return Index(result)

                return DatetimeIndex(result, tz=tz, name=name)
            return result
        elif getattr(arg, 'ndim', 1) > 1:
            raise TypeError('arg must be a string, datetime, list, tuple, '
                            '1-d array, or Series')

        arg = _ensure_object(arg)
        require_iso8601 = False

        if infer_datetime_format and format is None:
            format = _guess_datetime_format_for_array(arg, dayfirst=dayfirst)

        if format is not None:
            # There is a special fast-path for iso8601 formatted
            # datetime strings, so in those cases don't use the inferred
            # format because this path makes process slower in this
            # special case
            format_is_iso8601 = _format_is_iso(format)
            if format_is_iso8601:
                require_iso8601 = not infer_datetime_format
                format = None

        try:
            result = None

            if format is not None:
                # shortcut formatting here
                if format == '%Y%m%d':
                    try:
                        result = _attempt_YYYYMMDD(arg, errors=errors)
                    except:
                        raise ValueError("cannot convert the input to "
                                         "'%Y%m%d' date format")

                # fallback
                if result is None:
                    try:
                        result = tslib.array_strptime(arg, format, exact=exact,
                                                      errors=errors)
                    except tslib.OutOfBoundsDatetime:
                        if errors == 'raise':
                            raise
                        result = arg
                    except ValueError:
                        # if format was inferred, try falling back
                        # to array_to_datetime - terminate here
                        # for specified formats
                        if not infer_datetime_format:
                            if errors == 'raise':
                                raise
                            result = arg

            if result is None and (format is None or infer_datetime_format):
                result = tslib.array_to_datetime(
                    arg,
                    errors=errors,
                    utc=utc,
                    dayfirst=dayfirst,
                    yearfirst=yearfirst,
                    require_iso8601=require_iso8601
                )

            if is_datetime64_dtype(result) and box:
                result = DatetimeIndex(result, tz=tz, name=name)
            return result

        except ValueError as e:
            try:
                values, tz = tslib.datetime_to_datetime64(arg)
                return DatetimeIndex._simple_new(values, name=name, tz=tz)
            except (ValueError, TypeError):
                raise e
예제 #9
0
 def test_compat(self):
     self.assertFalse(is_datetime64_ns_dtype(self.dtype))
     self.assertFalse(is_datetime64_ns_dtype('period[D]'))
     self.assertFalse(is_datetime64_dtype(self.dtype))
     self.assertFalse(is_datetime64_dtype('period[D]'))
예제 #10
0
    def _convert_listlike(arg, box, format, name=None, tz=tz):

        if isinstance(arg, (list, tuple)):
            arg = np.array(arg, dtype='O')

        # these are shortcutable
        if is_datetime64tz_dtype(arg):
            if not isinstance(arg, DatetimeIndex):
                return DatetimeIndex(arg, tz=tz, name=name)
            if utc:
                arg = arg.tz_convert(None).tz_localize('UTC')
            return arg

        elif is_datetime64_ns_dtype(arg):
            if box and not isinstance(arg, DatetimeIndex):
                try:
                    return DatetimeIndex(arg, tz=tz, name=name)
                except ValueError:
                    pass

            return arg

        elif unit is not None:
            if format is not None:
                raise ValueError("cannot specify both format and unit")
            arg = getattr(arg, 'values', arg)
            result = tslib.array_with_unit_to_datetime(arg,
                                                       unit,
                                                       errors=errors)
            if box:
                if errors == 'ignore':
                    from pandas import Index
                    return Index(result)

                return DatetimeIndex(result, tz=tz, name=name)
            return result
        elif getattr(arg, 'ndim', 1) > 1:
            raise TypeError('arg must be a string, datetime, list, tuple, '
                            '1-d array, or Series')

        arg = _ensure_object(arg)
        require_iso8601 = False

        if infer_datetime_format and format is None:
            format = _guess_datetime_format_for_array(arg, dayfirst=dayfirst)

        if format is not None:
            # There is a special fast-path for iso8601 formatted
            # datetime strings, so in those cases don't use the inferred
            # format because this path makes process slower in this
            # special case
            format_is_iso8601 = _format_is_iso(format)
            if format_is_iso8601:
                require_iso8601 = not infer_datetime_format
                format = None

        try:
            result = None

            if format is not None:
                # shortcut formatting here
                if format == '%Y%m%d':
                    try:
                        result = _attempt_YYYYMMDD(arg, errors=errors)
                    except:
                        raise ValueError("cannot convert the input to "
                                         "'%Y%m%d' date format")

                # fallback
                if result is None:
                    try:
                        result = tslib.array_strptime(arg,
                                                      format,
                                                      exact=exact,
                                                      errors=errors)
                    except tslib.OutOfBoundsDatetime:
                        if errors == 'raise':
                            raise
                        result = arg
                    except ValueError:
                        # if format was inferred, try falling back
                        # to array_to_datetime - terminate here
                        # for specified formats
                        if not infer_datetime_format:
                            if errors == 'raise':
                                raise
                            result = arg

            if result is None and (format is None or infer_datetime_format):
                result = tslib.array_to_datetime(
                    arg,
                    errors=errors,
                    utc=utc,
                    dayfirst=dayfirst,
                    yearfirst=yearfirst,
                    require_iso8601=require_iso8601)

            if is_datetime64_dtype(result) and box:
                result = DatetimeIndex(result, tz=tz, name=name)
            return result

        except ValueError as e:
            try:
                values, tz = tslib.datetime_to_datetime64(arg)
                return DatetimeIndex._simple_new(values, name=name, tz=tz)
            except (ValueError, TypeError):
                raise e
예제 #11
0
 def test_compat(self):
     self.assertFalse(is_datetime64_ns_dtype(self.dtype))
     self.assertFalse(is_datetime64_ns_dtype('period[D]'))
     self.assertFalse(is_datetime64_dtype(self.dtype))
     self.assertFalse(is_datetime64_dtype('period[D]'))