Example #1
0
    def test_constructor_datelike_coercion(self):

        # GH 9477
        # incorrectly infering on dateimelike looking when object dtype is
        # specified
        s = Series([Timestamp('20130101'), 'NOV'], dtype=object)
        self.assertEqual(s.iloc[0], Timestamp('20130101'))
        self.assertEqual(s.iloc[1], 'NOV')
        self.assertTrue(s.dtype == object)

        # the dtype was being reset on the slicing and re-inferred to datetime
        # even thought the blocks are mixed
        belly = '216 3T19'.split()
        wing1 = '2T15 4H19'.split()
        wing2 = '416 4T20'.split()
        mat = pd.to_datetime('2016-01-22 2019-09-07'.split())
        df = pd.DataFrame({
            'wing1': wing1,
            'wing2': wing2,
            'mat': mat
        },
                          index=belly)

        result = df.loc['3T19']
        self.assertTrue(result.dtype == object)
        result = df.loc['216']
        self.assertTrue(result.dtype == object)
Example #2
0
    def test_quantile_multi(self):
        from numpy import percentile

        qs = [.1, .9]
        result = self.ts.quantile(qs)
        expected = pd.Series(
            [percentile(self.ts.valid(), 10),
             percentile(self.ts.valid(), 90)],
            index=qs,
            name=self.ts.name)
        tm.assert_series_equal(result, expected)

        dts = self.ts.index.to_series()
        dts.name = 'xxx'
        result = dts.quantile((.2, .2))
        expected = Series([
            Timestamp('2000-01-10 19:12:00'),
            Timestamp('2000-01-10 19:12:00')
        ],
                          index=[.2, .2],
                          name='xxx')
        tm.assert_series_equal(result, expected)

        result = self.ts.quantile([])
        expected = pd.Series([],
                             name=self.ts.name,
                             index=Index([], dtype=float))
        tm.assert_series_equal(result, expected)
    def test_astype_str(self):
        # GH4405
        digits = string.digits
        s1 = Series([digits * 10, tm.rands(63), tm.rands(64), tm.rands(1000)])
        s2 = Series([digits * 10, tm.rands(63), tm.rands(64), nan, 1.0])
        types = (compat.text_type, np.str_)
        for typ in types:
            for s in (s1, s2):
                res = s.astype(typ)
                expec = s.map(compat.text_type)
                assert_series_equal(res, expec)

        # GH9757
        # Test str and unicode on python 2.x and just str on python 3.x
        for tt in set([str, compat.text_type]):
            ts = Series([Timestamp('2010-01-04 00:00:00')])
            s = ts.astype(tt)
            expected = Series([tt('2010-01-04')])
            assert_series_equal(s, expected)

            ts = Series([Timestamp('2010-01-04 00:00:00', tz='US/Eastern')])
            s = ts.astype(tt)
            expected = Series([tt('2010-01-04 00:00:00-05:00')])
            assert_series_equal(s, expected)

            td = Series([Timedelta(1, unit='d')])
            s = td.astype(tt)
            expected = Series([tt('1 days 00:00:00.000000000')])
            assert_series_equal(s, expected)
Example #4
0
    def test_timedelta_fillna(self):
        # GH 3371
        s = Series([Timestamp('20130101'), Timestamp('20130101'), Timestamp(
            '20130102'), Timestamp('20130103 9:01:01')])
        td = s.diff()

        # reg fillna
        result = td.fillna(0)
        expected = Series([timedelta(0), timedelta(0), timedelta(1), timedelta(
            days=1, seconds=9 * 3600 + 60 + 1)])
        assert_series_equal(result, expected)

        # interprested as seconds
        result = td.fillna(1)
        expected = Series([timedelta(seconds=1), timedelta(0), timedelta(1),
                           timedelta(days=1, seconds=9 * 3600 + 60 + 1)])
        assert_series_equal(result, expected)

        result = td.fillna(timedelta(days=1, seconds=1))
        expected = Series([timedelta(days=1, seconds=1), timedelta(
            0), timedelta(1), timedelta(days=1, seconds=9 * 3600 + 60 + 1)])
        assert_series_equal(result, expected)

        result = td.fillna(np.timedelta64(int(1e9)))
        expected = Series([timedelta(seconds=1), timedelta(0), timedelta(1),
                           timedelta(days=1, seconds=9 * 3600 + 60 + 1)])
        assert_series_equal(result, expected)

        from pandas import tslib
        result = td.fillna(tslib.NaT)
        expected = Series([tslib.NaT, timedelta(0), timedelta(1),
                           timedelta(days=1, seconds=9 * 3600 + 60 + 1)],
                          dtype='m8[ns]')
        assert_series_equal(result, expected)

        # ffill
        td[2] = np.nan
        result = td.ffill()
        expected = td.fillna(0)
        expected[0] = np.nan
        assert_series_equal(result, expected)

        # bfill
        td[2] = np.nan
        result = td.bfill()
        expected = td.fillna(0)
        expected[2] = timedelta(days=1, seconds=9 * 3600 + 60 + 1)
        assert_series_equal(result, expected)
Example #5
0
    def test_datetime64_with_index(self):

        # arithmetic integer ops with an index
        s = Series(np.random.randn(5))
        expected = s - s.index.to_series()
        result = s - s.index
        assert_series_equal(result, expected)

        # GH 4629
        # arithmetic datetime64 ops with an index
        s = Series(date_range('20130101', periods=5),
                   index=date_range('20130101', periods=5))
        expected = s - s.index.to_series()
        result = s - s.index
        assert_series_equal(result, expected)

        result = s - s.index.to_period()
        assert_series_equal(result, expected)

        df = DataFrame(np.random.randn(5, 2),
                       index=date_range('20130101', periods=5))
        df['date'] = Timestamp('20130102')
        df['expected'] = df['date'] - df.index.to_series()
        df['result'] = df['date'] - df.index
        assert_series_equal(df['result'], df['expected'], check_names=False)
Example #6
0
    def test_quantile(self):
        from numpy import percentile

        q = self.ts.quantile(0.1)
        self.assertEqual(q, percentile(self.ts.valid(), 10))

        q = self.ts.quantile(0.9)
        self.assertEqual(q, percentile(self.ts.valid(), 90))

        # object dtype
        q = Series(self.ts, dtype=object).quantile(0.9)
        self.assertEqual(q, percentile(self.ts.valid(), 90))

        # datetime64[ns] dtype
        dts = self.ts.index.to_series()
        q = dts.quantile(.2)
        self.assertEqual(q, Timestamp('2000-01-10 19:12:00'))

        # timedelta64[ns] dtype
        tds = dts.diff()
        q = tds.quantile(.25)
        self.assertEqual(q, pd.to_timedelta('24:00:00'))

        # GH7661
        result = Series([np.timedelta64('NaT')]).sum()
        self.assertTrue(result is pd.NaT)

        msg = 'percentiles should all be in the interval \\[0, 1\\]'
        for invalid in [-1, 2, [0.5, -1], [0.5, 2]]:
            with tm.assertRaisesRegexp(ValueError, msg):
                self.ts.quantile(invalid)
Example #7
0
    def test_copy(self):

        for deep in [None, False, True]:
            s = Series(np.arange(10), dtype='float64')

            # default deep is True
            if deep is None:
                s2 = s.copy()
            else:
                s2 = s.copy(deep=deep)

            s2[::2] = np.NaN

            if deep is None or deep is True:
                # Did not modify original Series
                self.assertTrue(np.isnan(s2[0]))
                self.assertFalse(np.isnan(s[0]))
            else:
                # we DID modify the original Series
                self.assertTrue(np.isnan(s2[0]))
                self.assertTrue(np.isnan(s[0]))

        # GH 11794
        # copy of tz-aware
        expected = Series([Timestamp('2012/01/01', tz='UTC')])
        expected2 = Series([Timestamp('1999/01/01', tz='UTC')])

        for deep in [None, False, True]:

            s = Series([Timestamp('2012/01/01', tz='UTC')])

            if deep is None:
                s2 = s.copy()
            else:
                s2 = s.copy(deep=deep)

            s2[0] = pd.Timestamp('1999/01/01', tz='UTC')

            # default deep is True
            if deep is None or deep is True:
                # Did not modify original Series
                assert_series_equal(s2, expected2)
                assert_series_equal(s, expected)
            else:
                # we DID modify the original Series
                assert_series_equal(s2, expected2)
                assert_series_equal(s, expected2)
Example #8
0
 def test_sub_of_datetime_from_TimeSeries(self):
     from pandas.tseries.timedeltas import to_timedelta
     from datetime import datetime
     a = Timestamp(datetime(1993, 0o1, 0o7, 13, 30, 00))
     b = datetime(1993, 6, 22, 13, 30)
     a = Series([a])
     result = to_timedelta(np.abs(a - b))
     self.assertEqual(result.dtype, 'timedelta64[ns]')
Example #9
0
    def test_timedelta_series_ops(self):
        # GH11925

        s = Series(timedelta_range('1 day', periods=3))
        ts = Timestamp('2012-01-01')
        expected = Series(date_range('2012-01-02', periods=3))
        assert_series_equal(ts + s, expected)
        assert_series_equal(s + ts, expected)

        expected2 = Series(date_range('2011-12-31', periods=3, freq='-1D'))
        assert_series_equal(ts - s, expected2)
        assert_series_equal(ts + (-s), expected2)
Example #10
0
    def test_datetime64_tz_dropna(self):
        # DatetimeBlock
        s = Series([
            Timestamp('2011-01-01 10:00'), pd.NaT,
            Timestamp('2011-01-03 10:00'), pd.NaT
        ])
        result = s.dropna()
        expected = Series(
            [Timestamp('2011-01-01 10:00'),
             Timestamp('2011-01-03 10:00')],
            index=[0, 2])
        self.assert_series_equal(result, expected)

        # DatetimeBlockTZ
        idx = pd.DatetimeIndex(
            ['2011-01-01 10:00', pd.NaT, '2011-01-03 10:00', pd.NaT],
            tz='Asia/Tokyo')
        s = pd.Series(idx)
        self.assertEqual(s.dtype, 'datetime64[ns, Asia/Tokyo]')
        result = s.dropna()
        expected = Series([
            Timestamp('2011-01-01 10:00', tz='Asia/Tokyo'),
            Timestamp('2011-01-03 10:00', tz='Asia/Tokyo')
        ],
                          index=[0, 2])
        self.assertEqual(result.dtype, 'datetime64[ns, Asia/Tokyo]')
        self.assert_series_equal(result, expected)
Example #11
0
    def test_timedelta64_equal_timedelta_supported_ops(self):
        ser = Series([
            Timestamp('20130301'),
            Timestamp('20130228 23:00:00'),
            Timestamp('20130228 22:00:00'),
            Timestamp('20130228 21:00:00')
        ])

        intervals = 'D', 'h', 'm', 's', 'us'

        # TODO: unused
        # npy16_mappings = {'D': 24 * 60 * 60 * 1000000,
        #                   'h': 60 * 60 * 1000000,
        #                   'm': 60 * 1000000,
        #                   's': 1000000,
        #                   'us': 1}

        def timedelta64(*args):
            return sum(starmap(np.timedelta64, zip(args, intervals)))

        for op, d, h, m, s, us in product([operator.add, operator.sub],
                                          *([range(2)] * 5)):
            nptd = timedelta64(d, h, m, s, us)
            pytd = timedelta(days=d,
                             hours=h,
                             minutes=m,
                             seconds=s,
                             microseconds=us)
            lhs = op(ser, nptd)
            rhs = op(ser, pytd)

            try:
                assert_series_equal(lhs, rhs)
            except:
                raise AssertionError(
                    "invalid comparsion [op->{0},d->{1},h->{2},m->{3},"
                    "s->{4},us->{5}]\n{6}\n{7}\n".format(
                        op, d, h, m, s, us, lhs, rhs))
Example #12
0
    def test_constructor_dict_datetime64_index(self):
        # GH 9456

        dates_as_str = ['1984-02-19', '1988-11-06', '1989-12-03', '1990-03-15']
        values = [42544017.198965244, 1234565, 40512335.181958228, -1]

        def create_data(constructor):
            return dict(zip((constructor(x) for x in dates_as_str), values))

        data_datetime64 = create_data(np.datetime64)
        data_datetime = create_data(lambda x: datetime.strptime(x, '%Y-%m-%d'))
        data_Timestamp = create_data(Timestamp)

        expected = Series(values, (Timestamp(x) for x in dates_as_str))

        result_datetime64 = Series(data_datetime64)
        result_datetime = Series(data_datetime)
        result_Timestamp = Series(data_Timestamp)

        assert_series_equal(result_datetime64, expected)
        assert_series_equal(result_datetime, expected)
        assert_series_equal(result_Timestamp, expected)
Example #13
0
    def test_convert(self):
        # Tests: All to nans, coerce, true
        # Test coercion returns correct type
        s = Series(['a', 'b', 'c'])
        results = s._convert(datetime=True, coerce=True)
        expected = Series([lib.NaT] * 3)
        assert_series_equal(results, expected)

        results = s._convert(numeric=True, coerce=True)
        expected = Series([np.nan] * 3)
        assert_series_equal(results, expected)

        expected = Series([lib.NaT] * 3, dtype=np.dtype('m8[ns]'))
        results = s._convert(timedelta=True, coerce=True)
        assert_series_equal(results, expected)

        dt = datetime(2001, 1, 1, 0, 0)
        td = dt - datetime(2000, 1, 1, 0, 0)

        # Test coercion with mixed types
        s = Series(['a', '3.1415', dt, td])
        results = s._convert(datetime=True, coerce=True)
        expected = Series([lib.NaT, lib.NaT, dt, lib.NaT])
        assert_series_equal(results, expected)

        results = s._convert(numeric=True, coerce=True)
        expected = Series([nan, 3.1415, nan, nan])
        assert_series_equal(results, expected)

        results = s._convert(timedelta=True, coerce=True)
        expected = Series([lib.NaT, lib.NaT, lib.NaT, td],
                          dtype=np.dtype('m8[ns]'))
        assert_series_equal(results, expected)

        # Test standard conversion returns original
        results = s._convert(datetime=True)
        assert_series_equal(results, s)
        results = s._convert(numeric=True)
        expected = Series([nan, 3.1415, nan, nan])
        assert_series_equal(results, expected)
        results = s._convert(timedelta=True)
        assert_series_equal(results, s)

        # test pass-through and non-conversion when other types selected
        s = Series(['1.0', '2.0', '3.0'])
        results = s._convert(datetime=True, numeric=True, timedelta=True)
        expected = Series([1.0, 2.0, 3.0])
        assert_series_equal(results, expected)
        results = s._convert(True, False, True)
        assert_series_equal(results, s)

        s = Series([datetime(2001, 1, 1, 0, 0),
                    datetime(2001, 1, 1, 0, 0)],
                   dtype='O')
        results = s._convert(datetime=True, numeric=True, timedelta=True)
        expected = Series(
            [datetime(2001, 1, 1, 0, 0),
             datetime(2001, 1, 1, 0, 0)])
        assert_series_equal(results, expected)
        results = s._convert(datetime=False, numeric=True, timedelta=True)
        assert_series_equal(results, s)

        td = datetime(2001, 1, 1, 0, 0) - datetime(2000, 1, 1, 0, 0)
        s = Series([td, td], dtype='O')
        results = s._convert(datetime=True, numeric=True, timedelta=True)
        expected = Series([td, td])
        assert_series_equal(results, expected)
        results = s._convert(True, True, False)
        assert_series_equal(results, s)

        s = Series([1., 2, 3], index=['a', 'b', 'c'])
        result = s._convert(numeric=True)
        assert_series_equal(result, s)

        # force numeric conversion
        r = s.copy().astype('O')
        r['a'] = '1'
        result = r._convert(numeric=True)
        assert_series_equal(result, s)

        r = s.copy().astype('O')
        r['a'] = '1.'
        result = r._convert(numeric=True)
        assert_series_equal(result, s)

        r = s.copy().astype('O')
        r['a'] = 'garbled'
        result = r._convert(numeric=True)
        expected = s.copy()
        expected['a'] = nan
        assert_series_equal(result, expected)

        # GH 4119, not converting a mixed type (e.g.floats and object)
        s = Series([1, 'na', 3, 4])
        result = s._convert(datetime=True, numeric=True)
        expected = Series([1, nan, 3, 4])
        assert_series_equal(result, expected)

        s = Series([1, '', 3, 4])
        result = s._convert(datetime=True, numeric=True)
        assert_series_equal(result, expected)

        # dates
        s = Series([
            datetime(2001, 1, 1, 0, 0),
            datetime(2001, 1, 2, 0, 0),
            datetime(2001, 1, 3, 0, 0)
        ])
        s2 = Series([
            datetime(2001, 1, 1, 0, 0),
            datetime(2001, 1, 2, 0, 0),
            datetime(2001, 1, 3, 0, 0), 'foo', 1.0, 1,
            Timestamp('20010104'), '20010105'
        ],
                    dtype='O')

        result = s._convert(datetime=True)
        expected = Series([
            Timestamp('20010101'),
            Timestamp('20010102'),
            Timestamp('20010103')
        ],
                          dtype='M8[ns]')
        assert_series_equal(result, expected)

        result = s._convert(datetime=True, coerce=True)
        assert_series_equal(result, expected)

        expected = Series([
            Timestamp('20010101'),
            Timestamp('20010102'),
            Timestamp('20010103'), lib.NaT, lib.NaT, lib.NaT,
            Timestamp('20010104'),
            Timestamp('20010105')
        ],
                          dtype='M8[ns]')
        result = s2._convert(datetime=True,
                             numeric=False,
                             timedelta=False,
                             coerce=True)
        assert_series_equal(result, expected)
        result = s2._convert(datetime=True, coerce=True)
        assert_series_equal(result, expected)

        s = Series(['foo', 'bar', 1, 1.0], dtype='O')
        result = s._convert(datetime=True, coerce=True)
        expected = Series([lib.NaT] * 2 + [Timestamp(1)] * 2)
        assert_series_equal(result, expected)

        # preserver if non-object
        s = Series([1], dtype='float32')
        result = s._convert(datetime=True, coerce=True)
        assert_series_equal(result, s)

        # r = s.copy()
        # r[0] = np.nan
        # result = r._convert(convert_dates=True,convert_numeric=False)
        # self.assertEqual(result.dtype, 'M8[ns]')

        # dateutil parses some single letters into today's value as a date
        expected = Series([lib.NaT])
        for x in 'abcdefghijklmnopqrstuvwxyz':
            s = Series([x])
            result = s._convert(datetime=True, coerce=True)
            assert_series_equal(result, expected)
            s = Series([x.upper()])
            result = s._convert(datetime=True, coerce=True)
            assert_series_equal(result, expected)
Example #14
0
    def test_datetime64_fillna(self):

        s = Series([
            Timestamp('20130101'),
            Timestamp('20130101'),
            Timestamp('20130102'),
            Timestamp('20130103 9:01:01')
        ])
        s[2] = np.nan

        # reg fillna
        result = s.fillna(Timestamp('20130104'))
        expected = Series([
            Timestamp('20130101'),
            Timestamp('20130101'),
            Timestamp('20130104'),
            Timestamp('20130103 9:01:01')
        ])
        assert_series_equal(result, expected)

        from pandas import tslib
        result = s.fillna(tslib.NaT)
        expected = s
        assert_series_equal(result, expected)

        # ffill
        result = s.ffill()
        expected = Series([
            Timestamp('20130101'),
            Timestamp('20130101'),
            Timestamp('20130101'),
            Timestamp('20130103 9:01:01')
        ])
        assert_series_equal(result, expected)

        # bfill
        result = s.bfill()
        expected = Series([
            Timestamp('20130101'),
            Timestamp('20130101'),
            Timestamp('20130103 9:01:01'),
            Timestamp('20130103 9:01:01')
        ])
        assert_series_equal(result, expected)

        # GH 6587
        # make sure that we are treating as integer when filling
        # this also tests inference of a datetime-like with NaT's
        s = Series([pd.NaT, pd.NaT, '2013-08-05 15:30:00.000001'])
        expected = Series([
            '2013-08-05 15:30:00.000001', '2013-08-05 15:30:00.000001',
            '2013-08-05 15:30:00.000001'
        ],
                          dtype='M8[ns]')
        result = s.fillna(method='backfill')
        assert_series_equal(result, expected)
Example #15
0
    def test_datetime64_tz_fillna(self):
        for tz in ['US/Eastern', 'Asia/Tokyo']:
            # DatetimeBlock
            s = Series([
                Timestamp('2011-01-01 10:00'), pd.NaT,
                Timestamp('2011-01-03 10:00'), pd.NaT
            ])
            result = s.fillna(pd.Timestamp('2011-01-02 10:00'))
            expected = Series([
                Timestamp('2011-01-01 10:00'),
                Timestamp('2011-01-02 10:00'),
                Timestamp('2011-01-03 10:00'),
                Timestamp('2011-01-02 10:00')
            ])
            self.assert_series_equal(expected, result)

            result = s.fillna(pd.Timestamp('2011-01-02 10:00', tz=tz))
            expected = Series([
                Timestamp('2011-01-01 10:00'),
                Timestamp('2011-01-02 10:00', tz=tz),
                Timestamp('2011-01-03 10:00'),
                Timestamp('2011-01-02 10:00', tz=tz)
            ])
            self.assert_series_equal(expected, result)

            result = s.fillna('AAA')
            expected = Series([
                Timestamp('2011-01-01 10:00'), 'AAA',
                Timestamp('2011-01-03 10:00'), 'AAA'
            ],
                              dtype=object)
            self.assert_series_equal(expected, result)

            result = s.fillna({
                1: pd.Timestamp('2011-01-02 10:00', tz=tz),
                3: pd.Timestamp('2011-01-04 10:00')
            })
            expected = Series([
                Timestamp('2011-01-01 10:00'),
                Timestamp('2011-01-02 10:00', tz=tz),
                Timestamp('2011-01-03 10:00'),
                Timestamp('2011-01-04 10:00')
            ])
            self.assert_series_equal(expected, result)

            result = s.fillna({
                1: pd.Timestamp('2011-01-02 10:00'),
                3: pd.Timestamp('2011-01-04 10:00')
            })
            expected = Series([
                Timestamp('2011-01-01 10:00'),
                Timestamp('2011-01-02 10:00'),
                Timestamp('2011-01-03 10:00'),
                Timestamp('2011-01-04 10:00')
            ])
            self.assert_series_equal(expected, result)

            # DatetimeBlockTZ
            idx = pd.DatetimeIndex(
                ['2011-01-01 10:00', pd.NaT, '2011-01-03 10:00', pd.NaT],
                tz=tz)
            s = pd.Series(idx)
            result = s.fillna(pd.Timestamp('2011-01-02 10:00'))
            expected = Series([
                Timestamp('2011-01-01 10:00', tz=tz),
                Timestamp('2011-01-02 10:00'),
                Timestamp('2011-01-03 10:00', tz=tz),
                Timestamp('2011-01-02 10:00')
            ])
            self.assert_series_equal(expected, result)

            result = s.fillna(pd.Timestamp('2011-01-02 10:00', tz=tz))
            idx = pd.DatetimeIndex([
                '2011-01-01 10:00', '2011-01-02 10:00', '2011-01-03 10:00',
                '2011-01-02 10:00'
            ],
                                   tz=tz)
            expected = Series(idx)
            self.assert_series_equal(expected, result)

            result = s.fillna(
                pd.Timestamp('2011-01-02 10:00', tz=tz).to_pydatetime())
            idx = pd.DatetimeIndex([
                '2011-01-01 10:00', '2011-01-02 10:00', '2011-01-03 10:00',
                '2011-01-02 10:00'
            ],
                                   tz=tz)
            expected = Series(idx)
            self.assert_series_equal(expected, result)

            result = s.fillna('AAA')
            expected = Series([
                Timestamp('2011-01-01 10:00', tz=tz), 'AAA',
                Timestamp('2011-01-03 10:00', tz=tz), 'AAA'
            ],
                              dtype=object)
            self.assert_series_equal(expected, result)

            result = s.fillna({
                1: pd.Timestamp('2011-01-02 10:00', tz=tz),
                3: pd.Timestamp('2011-01-04 10:00')
            })
            expected = Series([
                Timestamp('2011-01-01 10:00', tz=tz),
                Timestamp('2011-01-02 10:00', tz=tz),
                Timestamp('2011-01-03 10:00', tz=tz),
                Timestamp('2011-01-04 10:00')
            ])
            self.assert_series_equal(expected, result)

            result = s.fillna({
                1: pd.Timestamp('2011-01-02 10:00', tz=tz),
                3: pd.Timestamp('2011-01-04 10:00', tz=tz)
            })
            expected = Series([
                Timestamp('2011-01-01 10:00', tz=tz),
                Timestamp('2011-01-02 10:00', tz=tz),
                Timestamp('2011-01-03 10:00', tz=tz),
                Timestamp('2011-01-04 10:00', tz=tz)
            ])
            self.assert_series_equal(expected, result)

            # filling with a naive/other zone, coerce to object
            result = s.fillna(Timestamp('20130101'))
            expected = Series([
                Timestamp('2011-01-01 10:00', tz=tz),
                Timestamp('2013-01-01'),
                Timestamp('2011-01-03 10:00', tz=tz),
                Timestamp('2013-01-01')
            ])
            self.assert_series_equal(expected, result)

            result = s.fillna(Timestamp('20130101', tz='US/Pacific'))
            expected = Series([
                Timestamp('2011-01-01 10:00', tz=tz),
                Timestamp('2013-01-01', tz='US/Pacific'),
                Timestamp('2011-01-03 10:00', tz=tz),
                Timestamp('2013-01-01', tz='US/Pacific')
            ])
            self.assert_series_equal(expected, result)
Example #16
0
    def test_constructor_with_datetime_tz(self):

        # 8260
        # support datetime64 with tz

        dr = date_range('20130101', periods=3, tz='US/Eastern')
        s = Series(dr)
        self.assertTrue(s.dtype.name == 'datetime64[ns, US/Eastern]')
        self.assertTrue(s.dtype == 'datetime64[ns, US/Eastern]')
        self.assertTrue(is_datetime64tz_dtype(s.dtype))
        self.assertTrue('datetime64[ns, US/Eastern]' in str(s))

        # export
        result = s.values
        self.assertIsInstance(result, np.ndarray)
        self.assertTrue(result.dtype == 'datetime64[ns]')

        exp = pd.DatetimeIndex(result)
        exp = exp.tz_localize('UTC').tz_convert(tz=s.dt.tz)
        self.assert_index_equal(dr, exp)

        # indexing
        result = s.iloc[0]
        self.assertEqual(
            result,
            Timestamp('2013-01-01 00:00:00-0500', tz='US/Eastern', freq='D'))
        result = s[0]
        self.assertEqual(
            result,
            Timestamp('2013-01-01 00:00:00-0500', tz='US/Eastern', freq='D'))

        result = s[Series([True, True, False], index=s.index)]
        assert_series_equal(result, s[0:2])

        result = s.iloc[0:1]
        assert_series_equal(result, Series(dr[0:1]))

        # concat
        result = pd.concat([s.iloc[0:1], s.iloc[1:]])
        assert_series_equal(result, s)

        # astype
        result = s.astype(object)
        expected = Series(DatetimeIndex(s._values).asobject)
        assert_series_equal(result, expected)

        result = Series(s.values).dt.tz_localize('UTC').dt.tz_convert(s.dt.tz)
        assert_series_equal(result, s)

        # astype - datetime64[ns, tz]
        result = Series(s.values).astype('datetime64[ns, US/Eastern]')
        assert_series_equal(result, s)

        result = Series(s.values).astype(s.dtype)
        assert_series_equal(result, s)

        result = s.astype('datetime64[ns, CET]')
        expected = Series(date_range('20130101 06:00:00', periods=3, tz='CET'))
        assert_series_equal(result, expected)

        # short str
        self.assertTrue('datetime64[ns, US/Eastern]' in str(s))

        # formatting with NaT
        result = s.shift()
        self.assertTrue('datetime64[ns, US/Eastern]' in str(result))
        self.assertTrue('NaT' in str(result))

        # long str
        t = Series(date_range('20130101', periods=1000, tz='US/Eastern'))
        self.assertTrue('datetime64[ns, US/Eastern]' in str(t))

        result = pd.DatetimeIndex(s, freq='infer')
        tm.assert_index_equal(result, dr)

        # inference
        s = Series([
            pd.Timestamp('2013-01-01 13:00:00-0800', tz='US/Pacific'),
            pd.Timestamp('2013-01-02 14:00:00-0800', tz='US/Pacific')
        ])
        self.assertTrue(s.dtype == 'datetime64[ns, US/Pacific]')
        self.assertTrue(lib.infer_dtype(s) == 'datetime64')

        s = Series([
            pd.Timestamp('2013-01-01 13:00:00-0800', tz='US/Pacific'),
            pd.Timestamp('2013-01-02 14:00:00-0800', tz='US/Eastern')
        ])
        self.assertTrue(s.dtype == 'object')
        self.assertTrue(lib.infer_dtype(s) == 'datetime')

        # with all NaT
        s = Series(pd.NaT, index=[0, 1], dtype='datetime64[ns, US/Eastern]')
        expected = Series(pd.DatetimeIndex(['NaT', 'NaT'], tz='US/Eastern'))
        assert_series_equal(s, expected)
Example #17
0
    def test_constructor_dtype_datetime64(self):
        import pandas.tslib as tslib

        s = Series(tslib.iNaT, dtype='M8[ns]', index=lrange(5))
        self.assertTrue(isnull(s).all())

        # in theory this should be all nulls, but since
        # we are not specifying a dtype is ambiguous
        s = Series(tslib.iNaT, index=lrange(5))
        self.assertFalse(isnull(s).all())

        s = Series(nan, dtype='M8[ns]', index=lrange(5))
        self.assertTrue(isnull(s).all())

        s = Series([datetime(2001, 1, 2, 0, 0), tslib.iNaT], dtype='M8[ns]')
        self.assertTrue(isnull(s[1]))
        self.assertEqual(s.dtype, 'M8[ns]')

        s = Series([datetime(2001, 1, 2, 0, 0), nan], dtype='M8[ns]')
        self.assertTrue(isnull(s[1]))
        self.assertEqual(s.dtype, 'M8[ns]')

        # GH3416
        dates = [
            np.datetime64(datetime(2013, 1, 1)),
            np.datetime64(datetime(2013, 1, 2)),
            np.datetime64(datetime(2013, 1, 3)),
        ]

        s = Series(dates)
        self.assertEqual(s.dtype, 'M8[ns]')

        s.ix[0] = np.nan
        self.assertEqual(s.dtype, 'M8[ns]')

        # invalid astypes
        for t in ['s', 'D', 'us', 'ms']:
            self.assertRaises(TypeError, s.astype, 'M8[%s]' % t)

        # GH3414 related
        self.assertRaises(
            TypeError, lambda x: Series(Series(dates).astype('int') / 1000000,
                                        dtype='M8[ms]'))
        self.assertRaises(TypeError,
                          lambda x: Series(dates, dtype='datetime64'))

        # invalid dates can be help as object
        result = Series([datetime(2, 1, 1)])
        self.assertEqual(result[0], datetime(2, 1, 1, 0, 0))

        result = Series([datetime(3000, 1, 1)])
        self.assertEqual(result[0], datetime(3000, 1, 1, 0, 0))

        # don't mix types
        result = Series([Timestamp('20130101'), 1], index=['a', 'b'])
        self.assertEqual(result['a'], Timestamp('20130101'))
        self.assertEqual(result['b'], 1)

        # GH6529
        # coerce datetime64 non-ns properly
        dates = date_range('01-Jan-2015', '01-Dec-2015', freq='M')
        values2 = dates.view(np.ndarray).astype('datetime64[ns]')
        expected = Series(values2, index=dates)

        for dtype in ['s', 'D', 'ms', 'us', 'ns']:
            values1 = dates.view(np.ndarray).astype('M8[{0}]'.format(dtype))
            result = Series(values1, dates)
            assert_series_equal(result, expected)

        # GH 13876
        # coerce to non-ns to object properly
        expected = Series(values2, index=dates, dtype=object)
        for dtype in ['s', 'D', 'ms', 'us', 'ns']:
            values1 = dates.view(np.ndarray).astype('M8[{0}]'.format(dtype))
            result = Series(values1, index=dates, dtype=object)
            assert_series_equal(result, expected)

        # leave datetime.date alone
        dates2 = np.array([d.date() for d in dates.to_pydatetime()],
                          dtype=object)
        series1 = Series(dates2, dates)
        self.assert_numpy_array_equal(series1.values, dates2)
        self.assertEqual(series1.dtype, object)

        # these will correctly infer a datetime
        s = Series([None, pd.NaT, '2013-08-05 15:30:00.000001'])
        self.assertEqual(s.dtype, 'datetime64[ns]')
        s = Series([np.nan, pd.NaT, '2013-08-05 15:30:00.000001'])
        self.assertEqual(s.dtype, 'datetime64[ns]')
        s = Series([pd.NaT, None, '2013-08-05 15:30:00.000001'])
        self.assertEqual(s.dtype, 'datetime64[ns]')
        s = Series([pd.NaT, np.nan, '2013-08-05 15:30:00.000001'])
        self.assertEqual(s.dtype, 'datetime64[ns]')

        # tz-aware (UTC and other tz's)
        # GH 8411
        dr = date_range('20130101', periods=3)
        self.assertTrue(Series(dr).iloc[0].tz is None)
        dr = date_range('20130101', periods=3, tz='UTC')
        self.assertTrue(str(Series(dr).iloc[0].tz) == 'UTC')
        dr = date_range('20130101', periods=3, tz='US/Eastern')
        self.assertTrue(str(Series(dr).iloc[0].tz) == 'US/Eastern')

        # non-convertible
        s = Series([1479596223000, -1479590, pd.NaT])
        self.assertTrue(s.dtype == 'object')
        self.assertTrue(s[2] is pd.NaT)
        self.assertTrue('NaT' in str(s))

        # if we passed a NaT it remains
        s = Series([datetime(2010, 1, 1), datetime(2, 1, 1), pd.NaT])
        self.assertTrue(s.dtype == 'object')
        self.assertTrue(s[2] is pd.NaT)
        self.assertTrue('NaT' in str(s))

        # if we passed a nan it remains
        s = Series([datetime(2010, 1, 1), datetime(2, 1, 1), np.nan])
        self.assertTrue(s.dtype == 'object')
        self.assertTrue(s[2] is np.nan)
        self.assertTrue('NaN' in str(s))
Example #18
0
    def test_operators_timedelta64(self):

        # invalid ops
        self.assertRaises(Exception, self.objSeries.__add__, 1)
        self.assertRaises(Exception, self.objSeries.__add__,
                          np.array(1, dtype=np.int64))
        self.assertRaises(Exception, self.objSeries.__sub__, 1)
        self.assertRaises(Exception, self.objSeries.__sub__,
                          np.array(1, dtype=np.int64))

        # seriese ops
        v1 = date_range('2012-1-1', periods=3, freq='D')
        v2 = date_range('2012-1-2', periods=3, freq='D')
        rs = Series(v2) - Series(v1)
        xp = Series(1e9 * 3600 * 24,
                    rs.index).astype('int64').astype('timedelta64[ns]')
        assert_series_equal(rs, xp)
        self.assertEqual(rs.dtype, 'timedelta64[ns]')

        df = DataFrame(dict(A=v1))
        td = Series([timedelta(days=i) for i in range(3)])
        self.assertEqual(td.dtype, 'timedelta64[ns]')

        # series on the rhs
        result = df['A'] - df['A'].shift()
        self.assertEqual(result.dtype, 'timedelta64[ns]')

        result = df['A'] + td
        self.assertEqual(result.dtype, 'M8[ns]')

        # scalar Timestamp on rhs
        maxa = df['A'].max()
        tm.assertIsInstance(maxa, Timestamp)

        resultb = df['A'] - df['A'].max()
        self.assertEqual(resultb.dtype, 'timedelta64[ns]')

        # timestamp on lhs
        result = resultb + df['A']
        values = [
            Timestamp('20111230'),
            Timestamp('20120101'),
            Timestamp('20120103')
        ]
        expected = Series(values, name='A')
        assert_series_equal(result, expected)

        # datetimes on rhs
        result = df['A'] - datetime(2001, 1, 1)
        expected = Series([timedelta(days=4017 + i) for i in range(3)],
                          name='A')
        assert_series_equal(result, expected)
        self.assertEqual(result.dtype, 'm8[ns]')

        d = datetime(2001, 1, 1, 3, 4)
        resulta = df['A'] - d
        self.assertEqual(resulta.dtype, 'm8[ns]')

        # roundtrip
        resultb = resulta + d
        assert_series_equal(df['A'], resultb)

        # timedeltas on rhs
        td = timedelta(days=1)
        resulta = df['A'] + td
        resultb = resulta - td
        assert_series_equal(resultb, df['A'])
        self.assertEqual(resultb.dtype, 'M8[ns]')

        # roundtrip
        td = timedelta(minutes=5, seconds=3)
        resulta = df['A'] + td
        resultb = resulta - td
        assert_series_equal(df['A'], resultb)
        self.assertEqual(resultb.dtype, 'M8[ns]')

        # inplace
        value = rs[2] + np.timedelta64(timedelta(minutes=5, seconds=1))
        rs[2] += np.timedelta64(timedelta(minutes=5, seconds=1))
        self.assertEqual(rs[2], value)
Example #19
0
    def test_datetime64_tz_fillna(self):
        for tz in ['US/Eastern', 'Asia/Tokyo']:
            # DatetimeBlock
            s = Series([
                Timestamp('2011-01-01 10:00'), pd.NaT,
                Timestamp('2011-01-03 10:00'), pd.NaT
            ])
            null_loc = pd.Series([False, True, False, True])

            result = s.fillna(pd.Timestamp('2011-01-02 10:00'))
            expected = Series([
                Timestamp('2011-01-01 10:00'),
                Timestamp('2011-01-02 10:00'),
                Timestamp('2011-01-03 10:00'),
                Timestamp('2011-01-02 10:00')
            ])
            self.assert_series_equal(expected, result)
            # check s is not changed
            self.assert_series_equal(pd.isnull(s), null_loc)

            result = s.fillna(pd.Timestamp('2011-01-02 10:00', tz=tz))
            expected = Series([
                Timestamp('2011-01-01 10:00'),
                Timestamp('2011-01-02 10:00', tz=tz),
                Timestamp('2011-01-03 10:00'),
                Timestamp('2011-01-02 10:00', tz=tz)
            ])
            self.assert_series_equal(expected, result)
            self.assert_series_equal(pd.isnull(s), null_loc)

            result = s.fillna('AAA')
            expected = Series([
                Timestamp('2011-01-01 10:00'), 'AAA',
                Timestamp('2011-01-03 10:00'), 'AAA'
            ],
                              dtype=object)
            self.assert_series_equal(expected, result)
            self.assert_series_equal(pd.isnull(s), null_loc)

            result = s.fillna({
                1: pd.Timestamp('2011-01-02 10:00', tz=tz),
                3: pd.Timestamp('2011-01-04 10:00')
            })
            expected = Series([
                Timestamp('2011-01-01 10:00'),
                Timestamp('2011-01-02 10:00', tz=tz),
                Timestamp('2011-01-03 10:00'),
                Timestamp('2011-01-04 10:00')
            ])
            self.assert_series_equal(expected, result)
            self.assert_series_equal(pd.isnull(s), null_loc)

            result = s.fillna({
                1: pd.Timestamp('2011-01-02 10:00'),
                3: pd.Timestamp('2011-01-04 10:00')
            })
            expected = Series([
                Timestamp('2011-01-01 10:00'),
                Timestamp('2011-01-02 10:00'),
                Timestamp('2011-01-03 10:00'),
                Timestamp('2011-01-04 10:00')
            ])
            self.assert_series_equal(expected, result)
            self.assert_series_equal(pd.isnull(s), null_loc)

            # DatetimeBlockTZ
            idx = pd.DatetimeIndex(
                ['2011-01-01 10:00', pd.NaT, '2011-01-03 10:00', pd.NaT],
                tz=tz)
            s = pd.Series(idx)
            self.assertEqual(s.dtype, 'datetime64[ns, {0}]'.format(tz))
            self.assert_series_equal(pd.isnull(s), null_loc)

            result = s.fillna(pd.Timestamp('2011-01-02 10:00'))
            expected = Series([
                Timestamp('2011-01-01 10:00', tz=tz),
                Timestamp('2011-01-02 10:00'),
                Timestamp('2011-01-03 10:00', tz=tz),
                Timestamp('2011-01-02 10:00')
            ])
            self.assert_series_equal(expected, result)
            self.assert_series_equal(pd.isnull(s), null_loc)

            result = s.fillna(pd.Timestamp('2011-01-02 10:00', tz=tz))
            idx = pd.DatetimeIndex([
                '2011-01-01 10:00', '2011-01-02 10:00', '2011-01-03 10:00',
                '2011-01-02 10:00'
            ],
                                   tz=tz)
            expected = Series(idx)
            self.assert_series_equal(expected, result)
            self.assert_series_equal(pd.isnull(s), null_loc)

            result = s.fillna(
                pd.Timestamp('2011-01-02 10:00', tz=tz).to_pydatetime())
            idx = pd.DatetimeIndex([
                '2011-01-01 10:00', '2011-01-02 10:00', '2011-01-03 10:00',
                '2011-01-02 10:00'
            ],
                                   tz=tz)
            expected = Series(idx)
            self.assert_series_equal(expected, result)
            self.assert_series_equal(pd.isnull(s), null_loc)

            result = s.fillna('AAA')
            expected = Series([
                Timestamp('2011-01-01 10:00', tz=tz), 'AAA',
                Timestamp('2011-01-03 10:00', tz=tz), 'AAA'
            ],
                              dtype=object)
            self.assert_series_equal(expected, result)
            self.assert_series_equal(pd.isnull(s), null_loc)

            result = s.fillna({
                1: pd.Timestamp('2011-01-02 10:00', tz=tz),
                3: pd.Timestamp('2011-01-04 10:00')
            })
            expected = Series([
                Timestamp('2011-01-01 10:00', tz=tz),
                Timestamp('2011-01-02 10:00', tz=tz),
                Timestamp('2011-01-03 10:00', tz=tz),
                Timestamp('2011-01-04 10:00')
            ])
            self.assert_series_equal(expected, result)
            self.assert_series_equal(pd.isnull(s), null_loc)

            result = s.fillna({
                1: pd.Timestamp('2011-01-02 10:00', tz=tz),
                3: pd.Timestamp('2011-01-04 10:00', tz=tz)
            })
            expected = Series([
                Timestamp('2011-01-01 10:00', tz=tz),
                Timestamp('2011-01-02 10:00', tz=tz),
                Timestamp('2011-01-03 10:00', tz=tz),
                Timestamp('2011-01-04 10:00', tz=tz)
            ])
            self.assert_series_equal(expected, result)
            self.assert_series_equal(pd.isnull(s), null_loc)

            # filling with a naive/other zone, coerce to object
            result = s.fillna(Timestamp('20130101'))
            expected = Series([
                Timestamp('2011-01-01 10:00', tz=tz),
                Timestamp('2013-01-01'),
                Timestamp('2011-01-03 10:00', tz=tz),
                Timestamp('2013-01-01')
            ])
            self.assert_series_equal(expected, result)
            self.assert_series_equal(pd.isnull(s), null_loc)

            result = s.fillna(Timestamp('20130101', tz='US/Pacific'))
            expected = Series([
                Timestamp('2011-01-01 10:00', tz=tz),
                Timestamp('2013-01-01', tz='US/Pacific'),
                Timestamp('2011-01-03 10:00', tz=tz),
                Timestamp('2013-01-01', tz='US/Pacific')
            ])
            self.assert_series_equal(expected, result)
            self.assert_series_equal(pd.isnull(s), null_loc)
Example #20
0
    def test_timedeltas_with_DateOffset(self):

        # GH 4532
        # operate with pd.offsets
        s = Series([Timestamp('20130101 9:01'), Timestamp('20130101 9:02')])

        result = s + pd.offsets.Second(5)
        result2 = pd.offsets.Second(5) + s
        expected = Series(
            [Timestamp('20130101 9:01:05'),
             Timestamp('20130101 9:02:05')])
        assert_series_equal(result, expected)
        assert_series_equal(result2, expected)

        result = s - pd.offsets.Second(5)
        result2 = -pd.offsets.Second(5) + s
        expected = Series(
            [Timestamp('20130101 9:00:55'),
             Timestamp('20130101 9:01:55')])
        assert_series_equal(result, expected)
        assert_series_equal(result2, expected)

        result = s + pd.offsets.Milli(5)
        result2 = pd.offsets.Milli(5) + s
        expected = Series([
            Timestamp('20130101 9:01:00.005'),
            Timestamp('20130101 9:02:00.005')
        ])
        assert_series_equal(result, expected)
        assert_series_equal(result2, expected)

        result = s + pd.offsets.Minute(5) + pd.offsets.Milli(5)
        expected = Series([
            Timestamp('20130101 9:06:00.005'),
            Timestamp('20130101 9:07:00.005')
        ])
        assert_series_equal(result, expected)

        # operate with np.timedelta64 correctly
        result = s + np.timedelta64(1, 's')
        result2 = np.timedelta64(1, 's') + s
        expected = Series(
            [Timestamp('20130101 9:01:01'),
             Timestamp('20130101 9:02:01')])
        assert_series_equal(result, expected)
        assert_series_equal(result2, expected)

        result = s + np.timedelta64(5, 'ms')
        result2 = np.timedelta64(5, 'ms') + s
        expected = Series([
            Timestamp('20130101 9:01:00.005'),
            Timestamp('20130101 9:02:00.005')
        ])
        assert_series_equal(result, expected)
        assert_series_equal(result2, expected)

        # valid DateOffsets
        for do in [
                'Hour', 'Minute', 'Second', 'Day', 'Micro', 'Milli', 'Nano'
        ]:
            op = getattr(pd.offsets, do)
            s + op(5)
            op(5) + s
Example #21
0
    def test_convert_objects(self):

        s = Series([1., 2, 3], index=['a', 'b', 'c'])
        with tm.assert_produces_warning(FutureWarning):
            result = s.convert_objects(convert_dates=False,
                                       convert_numeric=True)
        assert_series_equal(result, s)

        # force numeric conversion
        r = s.copy().astype('O')
        r['a'] = '1'
        with tm.assert_produces_warning(FutureWarning):
            result = r.convert_objects(convert_dates=False,
                                       convert_numeric=True)
        assert_series_equal(result, s)

        r = s.copy().astype('O')
        r['a'] = '1.'
        with tm.assert_produces_warning(FutureWarning):
            result = r.convert_objects(convert_dates=False,
                                       convert_numeric=True)
        assert_series_equal(result, s)

        r = s.copy().astype('O')
        r['a'] = 'garbled'
        expected = s.copy()
        expected['a'] = np.nan
        with tm.assert_produces_warning(FutureWarning):
            result = r.convert_objects(convert_dates=False,
                                       convert_numeric=True)
        assert_series_equal(result, expected)

        # GH 4119, not converting a mixed type (e.g.floats and object)
        s = Series([1, 'na', 3, 4])
        with tm.assert_produces_warning(FutureWarning):
            result = s.convert_objects(convert_numeric=True)
        expected = Series([1, np.nan, 3, 4])
        assert_series_equal(result, expected)

        s = Series([1, '', 3, 4])
        with tm.assert_produces_warning(FutureWarning):
            result = s.convert_objects(convert_numeric=True)
        expected = Series([1, np.nan, 3, 4])
        assert_series_equal(result, expected)

        # dates
        s = Series([
            datetime(2001, 1, 1, 0, 0),
            datetime(2001, 1, 2, 0, 0),
            datetime(2001, 1, 3, 0, 0)
        ])
        s2 = Series([
            datetime(2001, 1, 1, 0, 0),
            datetime(2001, 1, 2, 0, 0),
            datetime(2001, 1, 3, 0, 0), 'foo', 1.0, 1,
            Timestamp('20010104'), '20010105'
        ],
                    dtype='O')
        with tm.assert_produces_warning(FutureWarning):
            result = s.convert_objects(convert_dates=True,
                                       convert_numeric=False)
        expected = Series([
            Timestamp('20010101'),
            Timestamp('20010102'),
            Timestamp('20010103')
        ],
                          dtype='M8[ns]')
        assert_series_equal(result, expected)

        with tm.assert_produces_warning(FutureWarning):
            result = s.convert_objects(convert_dates='coerce',
                                       convert_numeric=False)
        with tm.assert_produces_warning(FutureWarning):
            result = s.convert_objects(convert_dates='coerce',
                                       convert_numeric=True)
        assert_series_equal(result, expected)

        expected = Series([
            Timestamp('20010101'),
            Timestamp('20010102'),
            Timestamp('20010103'), lib.NaT, lib.NaT, lib.NaT,
            Timestamp('20010104'),
            Timestamp('20010105')
        ],
                          dtype='M8[ns]')
        with tm.assert_produces_warning(FutureWarning):
            result = s2.convert_objects(convert_dates='coerce',
                                        convert_numeric=False)
        assert_series_equal(result, expected)
        with tm.assert_produces_warning(FutureWarning):
            result = s2.convert_objects(convert_dates='coerce',
                                        convert_numeric=True)
        assert_series_equal(result, expected)

        # preserver all-nans (if convert_dates='coerce')
        s = Series(['foo', 'bar', 1, 1.0], dtype='O')
        with tm.assert_produces_warning(FutureWarning):
            result = s.convert_objects(convert_dates='coerce',
                                       convert_numeric=False)
        expected = Series([lib.NaT] * 2 + [Timestamp(1)] * 2)
        assert_series_equal(result, expected)

        # preserver if non-object
        s = Series([1], dtype='float32')
        with tm.assert_produces_warning(FutureWarning):
            result = s.convert_objects(convert_dates='coerce',
                                       convert_numeric=False)
        assert_series_equal(result, s)

        # r = s.copy()
        # r[0] = np.nan
        # result = r.convert_objects(convert_dates=True,convert_numeric=False)
        # self.assertEqual(result.dtype, 'M8[ns]')

        # dateutil parses some single letters into today's value as a date
        for x in 'abcdefghijklmnopqrstuvwxyz':
            s = Series([x])
            with tm.assert_produces_warning(FutureWarning):
                result = s.convert_objects(convert_dates='coerce')
            assert_series_equal(result, s)
            s = Series([x.upper()])
            with tm.assert_produces_warning(FutureWarning):
                result = s.convert_objects(convert_dates='coerce')
            assert_series_equal(result, s)
Example #22
0
    def test_ops_nat(self):
        # GH 11349
        timedelta_series = Series([NaT, Timedelta('1s')])
        datetime_series = Series([NaT, Timestamp('19900315')])
        nat_series_dtype_timedelta = Series([NaT, NaT],
                                            dtype='timedelta64[ns]')
        nat_series_dtype_timestamp = Series([NaT, NaT], dtype='datetime64[ns]')
        single_nat_dtype_datetime = Series([NaT], dtype='datetime64[ns]')
        single_nat_dtype_timedelta = Series([NaT], dtype='timedelta64[ns]')

        # subtraction
        assert_series_equal(timedelta_series - NaT, nat_series_dtype_timedelta)
        assert_series_equal(-NaT + timedelta_series,
                            nat_series_dtype_timedelta)

        assert_series_equal(timedelta_series - single_nat_dtype_timedelta,
                            nat_series_dtype_timedelta)
        assert_series_equal(-single_nat_dtype_timedelta + timedelta_series,
                            nat_series_dtype_timedelta)

        assert_series_equal(datetime_series - NaT, nat_series_dtype_timestamp)
        assert_series_equal(-NaT + datetime_series, nat_series_dtype_timestamp)

        assert_series_equal(datetime_series - single_nat_dtype_datetime,
                            nat_series_dtype_timedelta)
        with tm.assertRaises(TypeError):
            -single_nat_dtype_datetime + datetime_series

        assert_series_equal(datetime_series - single_nat_dtype_timedelta,
                            nat_series_dtype_timestamp)
        assert_series_equal(-single_nat_dtype_timedelta + datetime_series,
                            nat_series_dtype_timestamp)

        # without a Series wrapping the NaT, it is ambiguous
        # whether it is a datetime64 or timedelta64
        # defaults to interpreting it as timedelta64
        assert_series_equal(nat_series_dtype_timestamp - NaT,
                            nat_series_dtype_timestamp)
        assert_series_equal(-NaT + nat_series_dtype_timestamp,
                            nat_series_dtype_timestamp)

        assert_series_equal(
            nat_series_dtype_timestamp - single_nat_dtype_datetime,
            nat_series_dtype_timedelta)
        with tm.assertRaises(TypeError):
            -single_nat_dtype_datetime + nat_series_dtype_timestamp

        assert_series_equal(
            nat_series_dtype_timestamp - single_nat_dtype_timedelta,
            nat_series_dtype_timestamp)
        assert_series_equal(
            -single_nat_dtype_timedelta + nat_series_dtype_timestamp,
            nat_series_dtype_timestamp)

        with tm.assertRaises(TypeError):
            timedelta_series - single_nat_dtype_datetime

        # addition
        assert_series_equal(nat_series_dtype_timestamp + NaT,
                            nat_series_dtype_timestamp)
        assert_series_equal(NaT + nat_series_dtype_timestamp,
                            nat_series_dtype_timestamp)

        assert_series_equal(
            nat_series_dtype_timestamp + single_nat_dtype_timedelta,
            nat_series_dtype_timestamp)
        assert_series_equal(
            single_nat_dtype_timedelta + nat_series_dtype_timestamp,
            nat_series_dtype_timestamp)

        assert_series_equal(nat_series_dtype_timedelta + NaT,
                            nat_series_dtype_timedelta)
        assert_series_equal(NaT + nat_series_dtype_timedelta,
                            nat_series_dtype_timedelta)

        assert_series_equal(
            nat_series_dtype_timedelta + single_nat_dtype_timedelta,
            nat_series_dtype_timedelta)
        assert_series_equal(
            single_nat_dtype_timedelta + nat_series_dtype_timedelta,
            nat_series_dtype_timedelta)

        assert_series_equal(timedelta_series + NaT, nat_series_dtype_timedelta)
        assert_series_equal(NaT + timedelta_series, nat_series_dtype_timedelta)

        assert_series_equal(timedelta_series + single_nat_dtype_timedelta,
                            nat_series_dtype_timedelta)
        assert_series_equal(single_nat_dtype_timedelta + timedelta_series,
                            nat_series_dtype_timedelta)

        assert_series_equal(nat_series_dtype_timestamp + NaT,
                            nat_series_dtype_timestamp)
        assert_series_equal(NaT + nat_series_dtype_timestamp,
                            nat_series_dtype_timestamp)

        assert_series_equal(
            nat_series_dtype_timestamp + single_nat_dtype_timedelta,
            nat_series_dtype_timestamp)
        assert_series_equal(
            single_nat_dtype_timedelta + nat_series_dtype_timestamp,
            nat_series_dtype_timestamp)

        assert_series_equal(nat_series_dtype_timedelta + NaT,
                            nat_series_dtype_timedelta)
        assert_series_equal(NaT + nat_series_dtype_timedelta,
                            nat_series_dtype_timedelta)

        assert_series_equal(
            nat_series_dtype_timedelta + single_nat_dtype_timedelta,
            nat_series_dtype_timedelta)
        assert_series_equal(
            single_nat_dtype_timedelta + nat_series_dtype_timedelta,
            nat_series_dtype_timedelta)

        assert_series_equal(
            nat_series_dtype_timedelta + single_nat_dtype_datetime,
            nat_series_dtype_timestamp)
        assert_series_equal(
            single_nat_dtype_datetime + nat_series_dtype_timedelta,
            nat_series_dtype_timestamp)

        # multiplication
        assert_series_equal(nat_series_dtype_timedelta * 1.0,
                            nat_series_dtype_timedelta)
        assert_series_equal(1.0 * nat_series_dtype_timedelta,
                            nat_series_dtype_timedelta)

        assert_series_equal(timedelta_series * 1, timedelta_series)
        assert_series_equal(1 * timedelta_series, timedelta_series)

        assert_series_equal(timedelta_series * 1.5,
                            Series([NaT, Timedelta('1.5s')]))
        assert_series_equal(1.5 * timedelta_series,
                            Series([NaT, Timedelta('1.5s')]))

        assert_series_equal(timedelta_series * nan, nat_series_dtype_timedelta)
        assert_series_equal(nan * timedelta_series, nat_series_dtype_timedelta)

        with tm.assertRaises(TypeError):
            datetime_series * 1
        with tm.assertRaises(TypeError):
            nat_series_dtype_timestamp * 1
        with tm.assertRaises(TypeError):
            datetime_series * 1.0
        with tm.assertRaises(TypeError):
            nat_series_dtype_timestamp * 1.0

        # division
        assert_series_equal(timedelta_series / 2,
                            Series([NaT, Timedelta('0.5s')]))
        assert_series_equal(timedelta_series / 2.0,
                            Series([NaT, Timedelta('0.5s')]))
        assert_series_equal(timedelta_series / nan, nat_series_dtype_timedelta)
        with tm.assertRaises(TypeError):
            nat_series_dtype_timestamp / 1.0
        with tm.assertRaises(TypeError):
            nat_series_dtype_timestamp / 1
Example #23
0
    def test_operators_datetimelike(self):
        def run_ops(ops, get_ser, test_ser):

            # check that we are getting a TypeError
            # with 'operate' (from core/ops.py) for the ops that are not
            # defined
            for op_str in ops:
                op = getattr(get_ser, op_str, None)
                with tm.assertRaisesRegexp(TypeError, 'operate'):
                    op(test_ser)

        # ## timedelta64 ###
        td1 = Series([timedelta(minutes=5, seconds=3)] * 3)
        td1.iloc[2] = np.nan
        td2 = timedelta(minutes=5, seconds=4)
        ops = [
            '__mul__', '__floordiv__', '__pow__', '__rmul__', '__rfloordiv__',
            '__rpow__'
        ]
        run_ops(ops, td1, td2)
        td1 + td2
        td2 + td1
        td1 - td2
        td2 - td1
        td1 / td2
        td2 / td1

        # ## datetime64 ###
        dt1 = Series([
            Timestamp('20111230'),
            Timestamp('20120101'),
            Timestamp('20120103')
        ])
        dt1.iloc[2] = np.nan
        dt2 = Series([
            Timestamp('20111231'),
            Timestamp('20120102'),
            Timestamp('20120104')
        ])
        ops = [
            '__add__', '__mul__', '__floordiv__', '__truediv__', '__div__',
            '__pow__', '__radd__', '__rmul__', '__rfloordiv__', '__rtruediv__',
            '__rdiv__', '__rpow__'
        ]
        run_ops(ops, dt1, dt2)
        dt1 - dt2
        dt2 - dt1

        # ## datetime64 with timetimedelta ###
        ops = [
            '__mul__', '__floordiv__', '__truediv__', '__div__', '__pow__',
            '__rmul__', '__rfloordiv__', '__rtruediv__', '__rdiv__', '__rpow__'
        ]
        run_ops(ops, dt1, td1)
        dt1 + td1
        td1 + dt1
        dt1 - td1
        # TODO: Decide if this ought to work.
        # td1 - dt1

        # ## timetimedelta with datetime64 ###
        ops = [
            '__sub__', '__mul__', '__floordiv__', '__truediv__', '__div__',
            '__pow__', '__rmul__', '__rfloordiv__', '__rtruediv__', '__rdiv__',
            '__rpow__'
        ]
        run_ops(ops, td1, dt1)
        td1 + dt1
        dt1 + td1

        # 8260, 10763
        # datetime64 with tz
        ops = [
            '__mul__', '__floordiv__', '__truediv__', '__div__', '__pow__',
            '__rmul__', '__rfloordiv__', '__rtruediv__', '__rdiv__', '__rpow__'
        ]
        dt1 = Series(date_range('2000-01-01 09:00:00',
                                periods=5,
                                tz='US/Eastern'),
                     name='foo')
        dt2 = dt1.copy()
        dt2.iloc[2] = np.nan
        td1 = Series(timedelta_range('1 days 1 min', periods=5, freq='H'))
        td2 = td1.copy()
        td2.iloc[1] = np.nan
        run_ops(ops, dt1, td1)

        result = dt1 + td1[0]
        expected = (dt1.dt.tz_localize(None) +
                    td1[0]).dt.tz_localize('US/Eastern')
        assert_series_equal(result, expected)

        result = dt2 + td2[0]
        expected = (dt2.dt.tz_localize(None) +
                    td2[0]).dt.tz_localize('US/Eastern')
        assert_series_equal(result, expected)

        # odd numpy behavior with scalar timedeltas
        if not _np_version_under1p8:
            result = td1[0] + dt1
            expected = (dt1.dt.tz_localize(None) +
                        td1[0]).dt.tz_localize('US/Eastern')
            assert_series_equal(result, expected)

            result = td2[0] + dt2
            expected = (dt2.dt.tz_localize(None) +
                        td2[0]).dt.tz_localize('US/Eastern')
            assert_series_equal(result, expected)

        result = dt1 - td1[0]
        expected = (dt1.dt.tz_localize(None) -
                    td1[0]).dt.tz_localize('US/Eastern')
        assert_series_equal(result, expected)
        self.assertRaises(TypeError, lambda: td1[0] - dt1)

        result = dt2 - td2[0]
        expected = (dt2.dt.tz_localize(None) -
                    td2[0]).dt.tz_localize('US/Eastern')
        assert_series_equal(result, expected)
        self.assertRaises(TypeError, lambda: td2[0] - dt2)

        result = dt1 + td1
        expected = (dt1.dt.tz_localize(None) +
                    td1).dt.tz_localize('US/Eastern')
        assert_series_equal(result, expected)

        result = dt2 + td2
        expected = (dt2.dt.tz_localize(None) +
                    td2).dt.tz_localize('US/Eastern')
        assert_series_equal(result, expected)

        result = dt1 - td1
        expected = (dt1.dt.tz_localize(None) -
                    td1).dt.tz_localize('US/Eastern')
        assert_series_equal(result, expected)

        result = dt2 - td2
        expected = (dt2.dt.tz_localize(None) -
                    td2).dt.tz_localize('US/Eastern')
        assert_series_equal(result, expected)

        self.assertRaises(TypeError, lambda: td1 - dt1)
        self.assertRaises(TypeError, lambda: td2 - dt2)