Ejemplo n.º 1
0
    def test_construction(self):
        i1 = Period('1/1/2005', freq='M')
        i2 = Period('Jan 2005')

        assert i1 == i2

        i1 = Period('2005', freq='A')
        i2 = Period('2005')
        i3 = Period('2005', freq='a')

        assert i1 == i2
        assert i1 == i3

        i4 = Period('2005', freq='M')
        i5 = Period('2005', freq='m')

        pytest.raises(ValueError, i1.__ne__, i4)
        assert i4 == i5

        i1 = Period.now('Q')
        i2 = Period(datetime.now(), freq='Q')
        i3 = Period.now('q')

        assert i1 == i2
        assert i1 == i3

        i1 = Period('1982', freq='min')
        i2 = Period('1982', freq='MIN')
        assert i1 == i2
        i2 = Period('1982', freq=('Min', 1))
        assert i1 == i2

        i1 = Period(year=2005, month=3, day=1, freq='D')
        i2 = Period('3/1/2005', freq='D')
        assert i1 == i2

        i3 = Period(year=2005, month=3, day=1, freq='d')
        assert i1 == i3

        i1 = Period('2007-01-01 09:00:00.001')
        expected = Period(datetime(2007, 1, 1, 9, 0, 0, 1000), freq='L')
        assert i1 == expected

        expected = Period(np_datetime64_compat(
            '2007-01-01 09:00:00.001Z'), freq='L')
        assert i1 == expected

        i1 = Period('2007-01-01 09:00:00.00101')
        expected = Period(datetime(2007, 1, 1, 9, 0, 0, 1010), freq='U')
        assert i1 == expected

        expected = Period(np_datetime64_compat('2007-01-01 09:00:00.00101Z'),
                          freq='U')
        assert i1 == expected

        pytest.raises(ValueError, Period, ordinal=200701)

        pytest.raises(ValueError, Period, '2007-1-1', freq='X')
Ejemplo n.º 2
0
 def test_asfreq_corner(self):
     val = Period(freq='A', year=2007)
     result1 = val.asfreq('5t')
     result2 = val.asfreq('t')
     expected = Period('2007-12-31 23:59', freq='t')
     self.assertEqual(result1.ordinal, expected.ordinal)
     self.assertEqual(result1.freqstr, '5T')
     self.assertEqual(result2.ordinal, expected.ordinal)
     self.assertEqual(result2.freqstr, 'T')
Ejemplo n.º 3
0
 def test_period_cons_annual(self):
     # bugs in scikits.timeseries
     for month in MONTHS:
         freq = 'A-%s' % month
         exp = Period('1989', freq=freq)
         stamp = exp.to_timestamp('D', how='end') + timedelta(days=30)
         p = Period(stamp, freq=freq)
         assert p == exp + 1
         assert isinstance(p, Period)
Ejemplo n.º 4
0
 def test_asfreq_near_zero_weekly(self):
     # GH#19834
     per1 = Period('0001-01-01', 'D') + 6
     per2 = Period('0001-01-01', 'D') - 6
     week1 = per1.asfreq('W')
     week2 = per2.asfreq('W')
     assert week1 != week2
     assert week1.asfreq('D', 'E') >= per1
     assert week2.asfreq('D', 'S') <= per2
Ejemplo n.º 5
0
 def test_asfreq_corner(self):
     val = Period(freq='A', year=2007)
     result1 = val.asfreq('5t')
     result2 = val.asfreq('t')
     expected = Period('2007-12-31 23:59', freq='t')
     assert result1.ordinal == expected.ordinal
     assert result1.freqstr == '5T'
     assert result2.ordinal == expected.ordinal
     assert result2.freqstr == 'T'
Ejemplo n.º 6
0
 def test_asfreq_near_zero_weekly(self):
     # GH#19834
     with tm.assert_produces_warning(FutureWarning):
         per1 = Period('0001-01-01', 'D') + 6
         per2 = Period('0001-01-01', 'D') - 6
     week1 = per1.asfreq('W')
     week2 = per2.asfreq('W')
     assert week1 != week2
     assert week1.asfreq('D', 'E') >= per1
     assert week2.asfreq('D', 'S') <= per2
Ejemplo n.º 7
0
    def test_asfreq_MS(self):
        initial = Period("2013")

        assert initial.asfreq(freq="M", how="S") == Period('2013-01', 'M')

        msg = pd._libs.tslibs.frequencies._INVALID_FREQ_ERROR
        with tm.assert_raises_regex(ValueError, msg):
            initial.asfreq(freq="MS", how="S")

        with tm.assert_raises_regex(ValueError, msg):
            pd.Period('2013-01', 'MS')

        assert _period_code_map.get("MS") is None
Ejemplo n.º 8
0
    def test_period_cons_quarterly(self):
        # bugs in scikits.timeseries
        for month in MONTHS:
            freq = 'Q-%s' % month
            exp = Period('1989Q3', freq=freq)
            assert '1989Q3' in str(exp)
            stamp = exp.to_timestamp('D', how='end')
            p = Period(stamp, freq=freq)
            assert p == exp

            stamp = exp.to_timestamp('3D', how='end')
            p = Period(stamp, freq=freq)
            assert p == exp
Ejemplo n.º 9
0
    def test_asfreq_MS(self):
        initial = Period("2013")

        assert initial.asfreq(freq="M", how="S") == Period('2013-01', 'M')

        msg = INVALID_FREQ_ERR_MSG
        with pytest.raises(ValueError, match=msg):
            initial.asfreq(freq="MS", how="S")

        with pytest.raises(ValueError, match=msg):
            Period('2013-01', 'MS')

        assert _period_code_map.get("MS") is None
Ejemplo n.º 10
0
    def test_asfreq_MS(self):
        initial = Period("2013")

        self.assertEqual(initial.asfreq(freq="M", how="S"),
                         Period('2013-01', 'M'))

        msg = pd.tseries.frequencies._INVALID_FREQ_ERROR
        with self.assertRaisesRegexp(ValueError, msg):
            initial.asfreq(freq="MS", how="S")

        with tm.assertRaisesRegexp(ValueError, msg):
            pd.Period('2013-01', 'MS')

        self.assertTrue(_period_code_map.get("MS") is None)
Ejemplo n.º 11
0
class Properties(object):
    def setup(self):
        self.per = Period('2017-09-06 08:28', freq='min')

    def time_year(self):
        self.per.year

    def time_month(self):
        self.per.month

    def time_day(self):
        self.per.day

    def time_hour(self):
        self.per.hour

    def time_minute(self):
        self.per.minute

    def time_second(self):
        self.per.second

    def time_is_leap_year(self):
        self.per.is_leap_year

    def time_quarter(self):
        self.per.quarter

    def time_qyear(self):
        self.per.qyear

    def time_week(self):
        self.per.week

    def time_daysinmonth(self):
        self.per.daysinmonth

    def time_dayofweek(self):
        self.per.dayofweek

    def time_dayofyear(self):
        self.per.dayofyear

    def time_start_time(self):
        self.per.start_time

    def time_end_time(self):
        self.per.end_time

    def time_to_timestamp():
        self.per.to_timestamp()

    def time_now():
        self.per.now()

    def time_asfreq():
        self.per.asfreq('A')
Ejemplo n.º 12
0
    def test_construction_bday(self):

        # Biz day construction, roll forward if non-weekday
        i1 = Period('3/10/12', freq='B')
        i2 = Period('3/10/12', freq='D')
        assert i1 == i2.asfreq('B')
        i2 = Period('3/11/12', freq='D')
        assert i1 == i2.asfreq('B')
        i2 = Period('3/12/12', freq='D')
        assert i1 == i2.asfreq('B')

        i3 = Period('3/10/12', freq='b')
        assert i1 == i3

        i1 = Period(year=2012, month=3, day=10, freq='B')
        i2 = Period('3/12/12', freq='B')
        assert i1 == i2
Ejemplo n.º 13
0
class PeriodUnaryMethods(object):
    params = ['M', 'min']
    param_names = ['freq']

    def setup(self, freq):
        self.per = Period('2012-06-01', freq=freq)

    def time_to_timestamp(self, freq):
        self.per.to_timestamp()

    def time_now(self, freq):
        self.per.now(freq)

    def time_asfreq(self, freq):
        self.per.asfreq('A')
Ejemplo n.º 14
0
    def test_asfreq_combined(self):
        # normal freq to combined freq
        p = Period('2007', freq='H')

        # ordinal will not change
        expected = Period('2007', freq='25H')
        for freq, how in zip(['1D1H', '1H1D'], ['E', 'S']):
            result = p.asfreq(freq, how=how)
            assert result == expected
            assert result.ordinal == expected.ordinal
            assert result.freq == expected.freq

        # combined freq to normal freq
        p1 = Period(freq='1D1H', year=2007)
        p2 = Period(freq='1H1D', year=2007)

        # ordinal will change because how=E is the default
        result1 = p1.asfreq('H')
        result2 = p2.asfreq('H')
        expected = Period('2007-01-02', freq='H')
        assert result1 == expected
        assert result1.ordinal == expected.ordinal
        assert result1.freq == expected.freq
        assert result2 == expected
        assert result2.ordinal == expected.ordinal
        assert result2.freq == expected.freq

        # ordinal will not change
        result1 = p1.asfreq('H', how='S')
        result2 = p2.asfreq('H', how='S')
        expected = Period('2007-01-01', freq='H')
        assert result1 == expected
        assert result1.ordinal == expected.ordinal
        assert result1.freq == expected.freq
        assert result2 == expected
        assert result2.ordinal == expected.ordinal
        assert result2.freq == expected.freq
Ejemplo n.º 15
0
    def test_to_timestamp(self):
        p = Period('1982', freq='A')
        start_ts = p.to_timestamp(how='S')
        aliases = ['s', 'StarT', 'BEGIn']
        for a in aliases:
            assert start_ts == p.to_timestamp('D', how=a)
            # freq with mult should not affect to the result
            assert start_ts == p.to_timestamp('3D', how=a)

        end_ts = p.to_timestamp(how='E')
        aliases = ['e', 'end', 'FINIsH']
        for a in aliases:
            assert end_ts == p.to_timestamp('D', how=a)
            assert end_ts == p.to_timestamp('3D', how=a)

        from_lst = ['A', 'Q', 'M', 'W', 'B', 'D', 'H', 'Min', 'S']

        def _ex(p):
            return Timestamp((p + 1).start_time.value - 1)

        for i, fcode in enumerate(from_lst):
            p = Period('1982', freq=fcode)
            result = p.to_timestamp().to_period(fcode)
            assert result == p

            assert p.start_time == p.to_timestamp(how='S')

            assert p.end_time == _ex(p)

        # Frequency other than daily

        p = Period('1985', freq='A')

        result = p.to_timestamp('H', how='end')
        expected = datetime(1985, 12, 31, 23)
        assert result == expected
        result = p.to_timestamp('3H', how='end')
        assert result == expected

        result = p.to_timestamp('T', how='end')
        expected = datetime(1985, 12, 31, 23, 59)
        assert result == expected
        result = p.to_timestamp('2T', how='end')
        assert result == expected

        result = p.to_timestamp(how='end')
        expected = datetime(1985, 12, 31)
        assert result == expected

        expected = datetime(1985, 1, 1)
        result = p.to_timestamp('H', how='start')
        assert result == expected
        result = p.to_timestamp('T', how='start')
        assert result == expected
        result = p.to_timestamp('S', how='start')
        assert result == expected
        result = p.to_timestamp('3H', how='start')
        assert result == expected
        result = p.to_timestamp('5S', how='start')
        assert result == expected
Ejemplo n.º 16
0
 def test_constructor_invalid(self):
     with pytest.raises(TypeError, match="Cannot convert input"):
         Timestamp(slice(2))
     with pytest.raises(ValueError, match="Cannot convert Period"):
         Timestamp(Period("1000-01-01"))
Ejemplo n.º 17
0
class TestPeriodIndex(DatetimeLike):
    _holder = PeriodIndex

    @pytest.fixture(
        params=[
            tm.makePeriodIndex(10),
            period_range("20130101", periods=10, freq="D")[::-1],
        ],
        ids=["index_inc", "index_dec"],
    )
    def indices(self, request):
        return request.param

    def create_index(self) -> PeriodIndex:
        return period_range("20130101", periods=5, freq="D")

    def test_pickle_compat_construction(self):
        pass

    @pytest.mark.parametrize("freq", ["D", "M", "A"])
    def test_pickle_round_trip(self, freq):
        idx = PeriodIndex(["2016-05-16", "NaT", NaT, np.NaN], freq=freq)
        result = tm.round_trip_pickle(idx)
        tm.assert_index_equal(result, idx)

    def test_where(self):
        # This is handled in test_indexing
        pass

    @pytest.mark.parametrize("use_numpy", [True, False])
    @pytest.mark.parametrize(
        "index",
        [
            period_range("2000-01-01", periods=3, freq="D"),
            period_range("2001-01-01", periods=3, freq="2D"),
            PeriodIndex(["2001-01", "NaT", "2003-01"], freq="M"),
        ],
    )
    def test_repeat_freqstr(self, index, use_numpy):
        # GH10183
        expected = PeriodIndex([p for p in index for _ in range(3)])
        result = np.repeat(index, 3) if use_numpy else index.repeat(3)
        tm.assert_index_equal(result, expected)
        assert result.freqstr == index.freqstr

    def test_no_millisecond_field(self):
        msg = "type object 'DatetimeIndex' has no attribute 'millisecond'"
        with pytest.raises(AttributeError, match=msg):
            DatetimeIndex.millisecond

        msg = "'DatetimeIndex' object has no attribute 'millisecond'"
        with pytest.raises(AttributeError, match=msg):
            DatetimeIndex([]).millisecond

    def test_make_time_series(self):
        index = period_range(freq="A", start="1/1/2001", end="12/1/2009")
        series = Series(1, index=index)
        assert isinstance(series, Series)

    def test_shallow_copy_empty(self):
        # GH13067
        idx = PeriodIndex([], freq="M")
        result = idx._shallow_copy()
        expected = idx

        tm.assert_index_equal(result, expected)

    def test_shallow_copy_disallow_i8(self):
        # GH-24391
        pi = period_range("2018-01-01", periods=3, freq="2D")
        with pytest.raises(AssertionError, match="ndarray"):
            pi._shallow_copy(pi.asi8)

    def test_shallow_copy_requires_disallow_period_index(self):
        pi = period_range("2018-01-01", periods=3, freq="2D")
        with pytest.raises(AssertionError, match="PeriodIndex"):
            pi._shallow_copy(pi)

    def test_view_asi8(self):
        idx = PeriodIndex([], freq="M")

        exp = np.array([], dtype=np.int64)
        tm.assert_numpy_array_equal(idx.view("i8"), exp)
        tm.assert_numpy_array_equal(idx.asi8, exp)

        idx = PeriodIndex(["2011-01", NaT], freq="M")

        exp = np.array([492, -9223372036854775808], dtype=np.int64)
        tm.assert_numpy_array_equal(idx.view("i8"), exp)
        tm.assert_numpy_array_equal(idx.asi8, exp)

        exp = np.array([14975, -9223372036854775808], dtype=np.int64)
        idx = PeriodIndex(["2011-01-01", NaT], freq="D")
        tm.assert_numpy_array_equal(idx.view("i8"), exp)
        tm.assert_numpy_array_equal(idx.asi8, exp)

    def test_values(self):
        idx = PeriodIndex([], freq="M")

        exp = np.array([], dtype=object)
        tm.assert_numpy_array_equal(idx.values, exp)
        tm.assert_numpy_array_equal(idx.to_numpy(), exp)

        exp = np.array([], dtype=np.int64)
        tm.assert_numpy_array_equal(idx.asi8, exp)

        idx = PeriodIndex(["2011-01", NaT], freq="M")

        exp = np.array([Period("2011-01", freq="M"), NaT], dtype=object)
        tm.assert_numpy_array_equal(idx.values, exp)
        tm.assert_numpy_array_equal(idx.to_numpy(), exp)
        exp = np.array([492, -9223372036854775808], dtype=np.int64)
        tm.assert_numpy_array_equal(idx.asi8, exp)

        idx = PeriodIndex(["2011-01-01", NaT], freq="D")

        exp = np.array([Period("2011-01-01", freq="D"), NaT], dtype=object)
        tm.assert_numpy_array_equal(idx.values, exp)
        tm.assert_numpy_array_equal(idx.to_numpy(), exp)
        exp = np.array([14975, -9223372036854775808], dtype=np.int64)
        tm.assert_numpy_array_equal(idx.asi8, exp)

    def test_period_index_length(self):
        pi = period_range(freq="A", start="1/1/2001", end="12/1/2009")
        assert len(pi) == 9

        pi = period_range(freq="Q", start="1/1/2001", end="12/1/2009")
        assert len(pi) == 4 * 9

        pi = period_range(freq="M", start="1/1/2001", end="12/1/2009")
        assert len(pi) == 12 * 9

        start = Period("02-Apr-2005", "B")
        i1 = period_range(start=start, periods=20)
        assert len(i1) == 20
        assert i1.freq == start.freq
        assert i1[0] == start

        end_intv = Period("2006-12-31", "W")
        i1 = period_range(end=end_intv, periods=10)
        assert len(i1) == 10
        assert i1.freq == end_intv.freq
        assert i1[-1] == end_intv

        end_intv = Period("2006-12-31", "1w")
        i2 = period_range(end=end_intv, periods=10)
        assert len(i1) == len(i2)
        assert (i1 == i2).all()
        assert i1.freq == i2.freq

        msg = "start and end must have same freq"
        with pytest.raises(ValueError, match=msg):
            period_range(start=start, end=end_intv)

        end_intv = Period("2005-05-01", "B")
        i1 = period_range(start=start, end=end_intv)

        msg = ("Of the three parameters: start, end, and periods, exactly two "
               "must be specified")
        with pytest.raises(ValueError, match=msg):
            period_range(start=start)

        # infer freq from first element
        i2 = PeriodIndex([end_intv, Period("2005-05-05", "B")])
        assert len(i2) == 2
        assert i2[0] == end_intv

        i2 = PeriodIndex(np.array([end_intv, Period("2005-05-05", "B")]))
        assert len(i2) == 2
        assert i2[0] == end_intv

        # Mixed freq should fail
        vals = [end_intv, Period("2006-12-31", "w")]
        msg = r"Input has different freq=W-SUN from PeriodIndex\(freq=B\)"
        with pytest.raises(IncompatibleFrequency, match=msg):
            PeriodIndex(vals)
        vals = np.array(vals)
        with pytest.raises(ValueError, match=msg):
            PeriodIndex(vals)

    def test_fields(self):
        # year, month, day, hour, minute
        # second, weekofyear, week, dayofweek, weekday, dayofyear, quarter
        # qyear
        pi = period_range(freq="A", start="1/1/2001", end="12/1/2005")
        self._check_all_fields(pi)

        pi = period_range(freq="Q", start="1/1/2001", end="12/1/2002")
        self._check_all_fields(pi)

        pi = period_range(freq="M", start="1/1/2001", end="1/1/2002")
        self._check_all_fields(pi)

        pi = period_range(freq="D", start="12/1/2001", end="6/1/2001")
        self._check_all_fields(pi)

        pi = period_range(freq="B", start="12/1/2001", end="6/1/2001")
        self._check_all_fields(pi)

        pi = period_range(freq="H", start="12/31/2001", end="1/1/2002 23:00")
        self._check_all_fields(pi)

        pi = period_range(freq="Min", start="12/31/2001", end="1/1/2002 00:20")
        self._check_all_fields(pi)

        pi = period_range(freq="S",
                          start="12/31/2001 00:00:00",
                          end="12/31/2001 00:05:00")
        self._check_all_fields(pi)

        end_intv = Period("2006-12-31", "W")
        i1 = period_range(end=end_intv, periods=10)
        self._check_all_fields(i1)

    def _check_all_fields(self, periodindex):
        fields = [
            "year",
            "month",
            "day",
            "hour",
            "minute",
            "second",
            "weekofyear",
            "week",
            "dayofweek",
            "dayofyear",
            "quarter",
            "qyear",
            "days_in_month",
        ]

        periods = list(periodindex)
        s = pd.Series(periodindex)

        for field in fields:
            field_idx = getattr(periodindex, field)
            assert len(periodindex) == len(field_idx)
            for x, val in zip(periods, field_idx):
                assert getattr(x, field) == val

            if len(s) == 0:
                continue

            field_s = getattr(s.dt, field)
            assert len(periodindex) == len(field_s)
            for x, val in zip(periods, field_s):
                assert getattr(x, field) == val

    def test_period_set_index_reindex(self):
        # GH 6631
        df = DataFrame(np.random.random(6))
        idx1 = period_range("2011/01/01", periods=6, freq="M")
        idx2 = period_range("2013", periods=6, freq="A")

        df = df.set_index(idx1)
        tm.assert_index_equal(df.index, idx1)
        df = df.set_index(idx2)
        tm.assert_index_equal(df.index, idx2)

    @pytest.mark.parametrize(
        "p_values, o_values, values, expected_values",
        [
            (
                [Period("2019Q1", "Q-DEC"),
                 Period("2019Q2", "Q-DEC")],
                [Period("2019Q1", "Q-DEC"),
                 Period("2019Q2", "Q-DEC"), "All"],
                [1.0, 1.0],
                [1.0, 1.0, np.nan],
            ),
            (
                [Period("2019Q1", "Q-DEC"),
                 Period("2019Q2", "Q-DEC")],
                [Period("2019Q1", "Q-DEC"),
                 Period("2019Q2", "Q-DEC")],
                [1.0, 1.0],
                [1.0, 1.0],
            ),
        ],
    )
    def test_period_reindex_with_object(self, p_values, o_values, values,
                                        expected_values):
        # GH 28337
        period_index = PeriodIndex(p_values)
        object_index = Index(o_values)

        s = pd.Series(values, index=period_index)
        result = s.reindex(object_index)
        expected = pd.Series(expected_values, index=object_index)
        tm.assert_series_equal(result, expected)

    def test_is_(self):
        create_index = lambda: period_range(
            freq="A", start="1/1/2001", end="12/1/2009")
        index = create_index()
        assert index.is_(index)
        assert not index.is_(create_index())
        assert index.is_(index.view())
        assert index.is_(index.view().view().view().view().view())
        assert index.view().is_(index)
        ind2 = index.view()
        index.name = "Apple"
        assert ind2.is_(index)
        assert not index.is_(index[:])
        assert not index.is_(index.asfreq("M"))
        assert not index.is_(index.asfreq("A"))

        assert not index.is_(index - 2)
        assert not index.is_(index - 0)

    def test_periods_number_check(self):
        msg = ("Of the three parameters: start, end, and periods, exactly two "
               "must be specified")
        with pytest.raises(ValueError, match=msg):
            period_range("2011-1-1", "2012-1-1", "B")

    def test_index_duplicate_periods(self):
        # monotonic
        idx = PeriodIndex([2000, 2007, 2007, 2009, 2009], freq="A-JUN")
        ts = Series(np.random.randn(len(idx)), index=idx)

        result = ts["2007"]
        expected = ts[1:3]
        tm.assert_series_equal(result, expected)
        result[:] = 1
        assert (ts[1:3] == 1).all()

        # not monotonic
        idx = PeriodIndex([2000, 2007, 2007, 2009, 2007], freq="A-JUN")
        ts = Series(np.random.randn(len(idx)), index=idx)

        result = ts["2007"]
        expected = ts[idx == "2007"]
        tm.assert_series_equal(result, expected)

    def test_index_unique(self):
        idx = PeriodIndex([2000, 2007, 2007, 2009, 2009], freq="A-JUN")
        expected = PeriodIndex([2000, 2007, 2009], freq="A-JUN")
        tm.assert_index_equal(idx.unique(), expected)
        assert idx.nunique() == 3

        idx = PeriodIndex([2000, 2007, 2007, 2009, 2007],
                          freq="A-JUN",
                          tz="US/Eastern")
        expected = PeriodIndex([2000, 2007, 2009],
                               freq="A-JUN",
                               tz="US/Eastern")
        tm.assert_index_equal(idx.unique(), expected)
        assert idx.nunique() == 3

    def test_shift(self):
        # This is tested in test_arithmetic
        pass

    @td.skip_if_32bit
    def test_ndarray_compat_properties(self):
        super().test_ndarray_compat_properties()

    def test_negative_ordinals(self):
        Period(ordinal=-1000, freq="A")
        Period(ordinal=0, freq="A")

        idx1 = PeriodIndex(ordinal=[-1, 0, 1], freq="A")
        idx2 = PeriodIndex(ordinal=np.array([-1, 0, 1]), freq="A")
        tm.assert_index_equal(idx1, idx2)

    def test_pindex_fieldaccessor_nat(self):
        idx = PeriodIndex(["2011-01", "2011-02", "NaT", "2012-03", "2012-04"],
                          freq="D",
                          name="name")

        exp = Index([2011, 2011, -1, 2012, 2012], dtype=np.int64, name="name")
        tm.assert_index_equal(idx.year, exp)
        exp = Index([1, 2, -1, 3, 4], dtype=np.int64, name="name")
        tm.assert_index_equal(idx.month, exp)

    def test_pindex_qaccess(self):
        pi = PeriodIndex(["2Q05", "3Q05", "4Q05", "1Q06", "2Q06"], freq="Q")
        s = Series(np.random.rand(len(pi)), index=pi).cumsum()
        # Todo: fix these accessors!
        assert s["05Q4"] == s[2]

    def test_pindex_multiples(self):
        expected = PeriodIndex(
            ["2011-01", "2011-03", "2011-05", "2011-07", "2011-09", "2011-11"],
            freq="2M",
        )

        pi = period_range(start="1/1/11", end="12/31/11", freq="2M")
        tm.assert_index_equal(pi, expected)
        assert pi.freq == offsets.MonthEnd(2)
        assert pi.freqstr == "2M"

        pi = period_range(start="1/1/11", periods=6, freq="2M")
        tm.assert_index_equal(pi, expected)
        assert pi.freq == offsets.MonthEnd(2)
        assert pi.freqstr == "2M"

    def test_iteration(self):
        index = period_range(start="1/1/10", periods=4, freq="B")

        result = list(index)
        assert isinstance(result[0], Period)
        assert result[0].freq == index.freq

    def test_is_full(self):
        index = PeriodIndex([2005, 2007, 2009], freq="A")
        assert not index.is_full

        index = PeriodIndex([2005, 2006, 2007], freq="A")
        assert index.is_full

        index = PeriodIndex([2005, 2005, 2007], freq="A")
        assert not index.is_full

        index = PeriodIndex([2005, 2005, 2006], freq="A")
        assert index.is_full

        index = PeriodIndex([2006, 2005, 2005], freq="A")
        with pytest.raises(ValueError, match="Index is not monotonic"):
            index.is_full

        assert index[:0].is_full

    def test_with_multi_index(self):
        # #1705
        index = date_range("1/1/2012", periods=4, freq="12H")
        index_as_arrays = [index.to_period(freq="D"), index.hour]

        s = Series([0, 1, 2, 3], index_as_arrays)

        assert isinstance(s.index.levels[0], PeriodIndex)

        assert isinstance(s.index.values[0][0], Period)

    def test_convert_array_of_periods(self):
        rng = period_range("1/1/2000", periods=20, freq="D")
        periods = list(rng)

        result = Index(periods)
        assert isinstance(result, PeriodIndex)

    def test_append_concat(self):
        # #1815
        d1 = date_range("12/31/1990", "12/31/1999", freq="A-DEC")
        d2 = date_range("12/31/2000", "12/31/2009", freq="A-DEC")

        s1 = Series(np.random.randn(10), d1)
        s2 = Series(np.random.randn(10), d2)

        s1 = s1.to_period()
        s2 = s2.to_period()

        # drops index
        result = pd.concat([s1, s2])
        assert isinstance(result.index, PeriodIndex)
        assert result.index[0] == s1.index[0]

    def test_pickle_freq(self):
        # GH2891
        prng = period_range("1/1/2011", "1/1/2012", freq="M")
        new_prng = tm.round_trip_pickle(prng)
        assert new_prng.freq == offsets.MonthEnd()
        assert new_prng.freqstr == "M"

    def test_map(self):
        # test_map_dictlike generally tests

        index = PeriodIndex([2005, 2007, 2009], freq="A")
        result = index.map(lambda x: x.ordinal)
        exp = Index([x.ordinal for x in index])
        tm.assert_index_equal(result, exp)

    def test_insert(self):
        # GH 18295 (test missing)
        expected = PeriodIndex(["2017Q1", NaT, "2017Q2", "2017Q3", "2017Q4"],
                               freq="Q")
        for na in (np.nan, NaT, None):
            result = period_range("2017Q1", periods=4, freq="Q").insert(1, na)
            tm.assert_index_equal(result, expected)

    @pytest.mark.parametrize(
        "msg, key",
        [
            (r"Period\('2019', 'A-DEC'\), 'foo', 'bar'",
             (Period(2019), "foo", "bar")),
            (r"Period\('2019', 'A-DEC'\), 'y1', 'bar'",
             (Period(2019), "y1", "bar")),
            (r"Period\('2019', 'A-DEC'\), 'foo', 'z1'",
             (Period(2019), "foo", "z1")),
            (
                r"Period\('2018', 'A-DEC'\), Period\('2016', 'A-DEC'\), 'bar'",
                (Period(2018), Period(2016), "bar"),
            ),
            (r"Period\('2018', 'A-DEC'\), 'foo', 'y1'",
             (Period(2018), "foo", "y1")),
            (
                r"Period\('2017', 'A-DEC'\), 'foo', Period\('2015', 'A-DEC'\)",
                (Period(2017), "foo", Period(2015)),
            ),
            (r"Period\('2017', 'A-DEC'\), 'z1', 'bar'",
             (Period(2017), "z1", "bar")),
        ],
    )
    def test_contains_raise_error_if_period_index_is_in_multi_index(
            self, msg, key):
        # issue 20684
        """
        parse_time_string return parameter if type not matched.
        PeriodIndex.get_loc takes returned value from parse_time_string as a tuple.
        If first argument is Period and a tuple has 3 items,
        process go on not raise exception
        """
        df = DataFrame({
            "A": [Period(2019), "x1", "x2"],
            "B": [Period(2018), Period(2016), "y1"],
            "C": [Period(2017), "z1", Period(2015)],
            "V1": [1, 2, 3],
            "V2": [10, 20, 30],
        }).set_index(["A", "B", "C"])
        with pytest.raises(KeyError, match=msg):
            df.loc[key]
Ejemplo n.º 18
0
 def setup(self, freq):
     self.per = Period("2012-06-01", freq=freq)
##### Thus the function used is the fill_method 

## Periods logic 

##### Periods are time spans vs time points (timestamps) .They help in easy calender arithmetic 

##### pandas has got a period type 

# In[456]:

from pandas import Period as Pe


# In[457]:

p=Pe('2011',freq='A-jun')


# In[458]:

p


##### Arithmetic 

# In[460]:

p+2


# In[462]:
Ejemplo n.º 20
0
 def test_to_timestamp_out_of_bounds(self):
     # GH#19643, currently gives Timestamp('1754-08-30 22:43:41.128654848')
     per = Period('0001-01-01', freq='B')
     with pytest.raises(OutOfBoundsDatetime):
         per.to_timestamp()
Ejemplo n.º 21
0
    def test_conv_annual(self):
        # frequency conversion tests: from Annual Frequency

        ival_A = Period(freq='A', year=2007)

        ival_AJAN = Period(freq="A-JAN", year=2007)
        ival_AJUN = Period(freq="A-JUN", year=2007)
        ival_ANOV = Period(freq="A-NOV", year=2007)

        ival_A_to_Q_start = Period(freq='Q', year=2007, quarter=1)
        ival_A_to_Q_end = Period(freq='Q', year=2007, quarter=4)
        ival_A_to_M_start = Period(freq='M', year=2007, month=1)
        ival_A_to_M_end = Period(freq='M', year=2007, month=12)
        ival_A_to_W_start = Period(freq='W', year=2007, month=1, day=1)
        ival_A_to_W_end = Period(freq='W', year=2007, month=12, day=31)
        ival_A_to_B_start = Period(freq='B', year=2007, month=1, day=1)
        ival_A_to_B_end = Period(freq='B', year=2007, month=12, day=31)
        ival_A_to_D_start = Period(freq='D', year=2007, month=1, day=1)
        ival_A_to_D_end = Period(freq='D', year=2007, month=12, day=31)
        ival_A_to_H_start = Period(freq='H', year=2007, month=1, day=1, hour=0)
        ival_A_to_H_end = Period(freq='H', year=2007, month=12, day=31,
                                 hour=23)
        ival_A_to_T_start = Period(freq='Min', year=2007, month=1, day=1,
                                   hour=0, minute=0)
        ival_A_to_T_end = Period(freq='Min', year=2007, month=12, day=31,
                                 hour=23, minute=59)
        ival_A_to_S_start = Period(freq='S', year=2007, month=1, day=1, hour=0,
                                   minute=0, second=0)
        ival_A_to_S_end = Period(freq='S', year=2007, month=12, day=31,
                                 hour=23, minute=59, second=59)

        ival_AJAN_to_D_end = Period(freq='D', year=2007, month=1, day=31)
        ival_AJAN_to_D_start = Period(freq='D', year=2006, month=2, day=1)
        ival_AJUN_to_D_end = Period(freq='D', year=2007, month=6, day=30)
        ival_AJUN_to_D_start = Period(freq='D', year=2006, month=7, day=1)
        ival_ANOV_to_D_end = Period(freq='D', year=2007, month=11, day=30)
        ival_ANOV_to_D_start = Period(freq='D', year=2006, month=12, day=1)

        assert ival_A.asfreq('Q', 'S') == ival_A_to_Q_start
        assert ival_A.asfreq('Q', 'e') == ival_A_to_Q_end
        assert ival_A.asfreq('M', 's') == ival_A_to_M_start
        assert ival_A.asfreq('M', 'E') == ival_A_to_M_end
        assert ival_A.asfreq('W', 'S') == ival_A_to_W_start
        assert ival_A.asfreq('W', 'E') == ival_A_to_W_end
        assert ival_A.asfreq('B', 'S') == ival_A_to_B_start
        assert ival_A.asfreq('B', 'E') == ival_A_to_B_end
        assert ival_A.asfreq('D', 'S') == ival_A_to_D_start
        assert ival_A.asfreq('D', 'E') == ival_A_to_D_end
        assert ival_A.asfreq('H', 'S') == ival_A_to_H_start
        assert ival_A.asfreq('H', 'E') == ival_A_to_H_end
        assert ival_A.asfreq('min', 'S') == ival_A_to_T_start
        assert ival_A.asfreq('min', 'E') == ival_A_to_T_end
        assert ival_A.asfreq('T', 'S') == ival_A_to_T_start
        assert ival_A.asfreq('T', 'E') == ival_A_to_T_end
        assert ival_A.asfreq('S', 'S') == ival_A_to_S_start
        assert ival_A.asfreq('S', 'E') == ival_A_to_S_end

        assert ival_AJAN.asfreq('D', 'S') == ival_AJAN_to_D_start
        assert ival_AJAN.asfreq('D', 'E') == ival_AJAN_to_D_end

        assert ival_AJUN.asfreq('D', 'S') == ival_AJUN_to_D_start
        assert ival_AJUN.asfreq('D', 'E') == ival_AJUN_to_D_end

        assert ival_ANOV.asfreq('D', 'S') == ival_ANOV_to_D_start
        assert ival_ANOV.asfreq('D', 'E') == ival_ANOV_to_D_end

        assert ival_A.asfreq('A') == ival_A
Ejemplo n.º 22
0
import numpy as np
import pytest
import pytz

from pandas._libs.tslib import iNaT

from pandas import (
    DatetimeIndex, Index, NaT, Period, Series, Timedelta, TimedeltaIndex,
    Timestamp, isna)
from pandas.core.arrays import PeriodArray
from pandas.util import testing as tm


@pytest.mark.parametrize('nat, idx', [(Timestamp('NaT'), DatetimeIndex),
                                      (Timedelta('NaT'), TimedeltaIndex),
                                      (Period('NaT', freq='M'), PeriodArray)])
def test_nat_fields(nat, idx):

    for field in idx._field_ops:

        # weekday is a property of DTI, but a method
        # on NaT/Timestamp for compat with datetime
        if field == 'weekday':
            continue

        result = getattr(NaT, field)
        assert np.isnan(result)

        result = getattr(nat, field)
        assert np.isnan(result)
Ejemplo n.º 23
0
class TestDataFrameSetItem:
    @pytest.mark.parametrize("dtype", ["int32", "int64", "float32", "float64"])
    def test_setitem_dtype(self, dtype, float_frame):
        arr = np.random.randn(len(float_frame))

        float_frame[dtype] = np.array(arr, dtype=dtype)
        assert float_frame[dtype].dtype.name == dtype

    def test_setitem_list_not_dataframe(self, float_frame):
        data = np.random.randn(len(float_frame), 2)
        float_frame[["A", "B"]] = data
        tm.assert_almost_equal(float_frame[["A", "B"]].values, data)

    def test_setitem_error_msmgs(self):

        # GH 7432
        df = DataFrame(
            {
                "bar": [1, 2, 3],
                "baz": ["d", "e", "f"]
            },
            index=Index(["a", "b", "c"], name="foo"),
        )
        ser = Series(
            ["g", "h", "i", "j"],
            index=Index(["a", "b", "c", "a"], name="foo"),
            name="fiz",
        )
        msg = "cannot reindex from a duplicate axis"
        with pytest.raises(ValueError, match=msg):
            df["newcol"] = ser

        # GH 4107, more descriptive error message
        df = DataFrame(np.random.randint(0, 2, (4, 4)),
                       columns=["a", "b", "c", "d"])

        msg = "incompatible index of inserted column with frame index"
        with pytest.raises(TypeError, match=msg):
            df["gr"] = df.groupby(["b", "c"]).count()

    def test_setitem_benchmark(self):
        # from the vb_suite/frame_methods/frame_insert_columns
        N = 10
        K = 5
        df = DataFrame(index=range(N))
        new_col = np.random.randn(N)
        for i in range(K):
            df[i] = new_col
        expected = DataFrame(np.repeat(new_col, K).reshape(N, K),
                             index=range(N))
        tm.assert_frame_equal(df, expected)

    def test_setitem_different_dtype(self):
        df = DataFrame(np.random.randn(5, 3),
                       index=np.arange(5),
                       columns=["c", "b", "a"])
        df.insert(0, "foo", df["a"])
        df.insert(2, "bar", df["c"])

        # diff dtype

        # new item
        df["x"] = df["a"].astype("float32")
        result = df.dtypes
        expected = Series(
            [np.dtype("float64")] * 5 + [np.dtype("float32")],
            index=["foo", "c", "bar", "b", "a", "x"],
        )
        tm.assert_series_equal(result, expected)

        # replacing current (in different block)
        df["a"] = df["a"].astype("float32")
        result = df.dtypes
        expected = Series(
            [np.dtype("float64")] * 4 + [np.dtype("float32")] * 2,
            index=["foo", "c", "bar", "b", "a", "x"],
        )
        tm.assert_series_equal(result, expected)

        df["y"] = df["a"].astype("int32")
        result = df.dtypes
        expected = Series(
            [np.dtype("float64")] * 4 + [np.dtype("float32")] * 2 +
            [np.dtype("int32")],
            index=["foo", "c", "bar", "b", "a", "x", "y"],
        )
        tm.assert_series_equal(result, expected)

    def test_setitem_empty_columns(self):
        # GH 13522
        df = DataFrame(index=["A", "B", "C"])
        df["X"] = df.index
        df["X"] = ["x", "y", "z"]
        exp = DataFrame(data={"X": ["x", "y", "z"]}, index=["A", "B", "C"])
        tm.assert_frame_equal(df, exp)

    def test_setitem_dt64_index_empty_columns(self):
        rng = date_range("1/1/2000 00:00:00", "1/1/2000 1:59:50", freq="10s")
        df = DataFrame(index=np.arange(len(rng)))

        df["A"] = rng
        assert df["A"].dtype == np.dtype("M8[ns]")

    def test_setitem_timestamp_empty_columns(self):
        # GH#19843
        df = DataFrame(index=range(3))
        df["now"] = Timestamp("20130101", tz="UTC")

        expected = DataFrame([[Timestamp("20130101", tz="UTC")]] * 3,
                             index=[0, 1, 2],
                             columns=["now"])
        tm.assert_frame_equal(df, expected)

    def test_setitem_wrong_length_categorical_dtype_raises(self):
        # GH#29523
        cat = Categorical.from_codes([0, 1, 1, 0, 1, 2], ["a", "b", "c"])
        df = DataFrame(range(10), columns=["bar"])

        msg = (rf"Length of values \({len(cat)}\) "
               rf"does not match length of index \({len(df)}\)")
        with pytest.raises(ValueError, match=msg):
            df["foo"] = cat

    def test_setitem_with_sparse_value(self):
        # GH#8131
        df = DataFrame({"c_1": ["a", "b", "c"], "n_1": [1.0, 2.0, 3.0]})
        sp_array = SparseArray([0, 0, 1])
        df["new_column"] = sp_array

        expected = Series(sp_array, name="new_column")
        tm.assert_series_equal(df["new_column"], expected)

    def test_setitem_with_unaligned_sparse_value(self):
        df = DataFrame({"c_1": ["a", "b", "c"], "n_1": [1.0, 2.0, 3.0]})
        sp_series = Series(SparseArray([0, 0, 1]), index=[2, 1, 0])

        df["new_column"] = sp_series
        expected = Series(SparseArray([1, 0, 0]), name="new_column")
        tm.assert_series_equal(df["new_column"], expected)

    def test_setitem_dict_preserves_dtypes(self):
        # https://github.com/pandas-dev/pandas/issues/34573
        expected = DataFrame({
            "a": Series([0, 1, 2], dtype="int64"),
            "b": Series([1, 2, 3], dtype=float),
            "c": Series([1, 2, 3], dtype=float),
        })
        df = DataFrame({
            "a": Series([], dtype="int64"),
            "b": Series([], dtype=float),
            "c": Series([], dtype=float),
        })
        for idx, b in enumerate([1, 2, 3]):
            df.loc[df.shape[0]] = {"a": int(idx), "b": float(b), "c": float(b)}
        tm.assert_frame_equal(df, expected)

    @pytest.mark.parametrize(
        "obj,dtype",
        [
            (Period("2020-01"), PeriodDtype("M")),
            (Interval(left=0, right=5), IntervalDtype("int64", "right")),
            (
                Timestamp("2011-01-01", tz="US/Eastern"),
                DatetimeTZDtype(tz="US/Eastern"),
            ),
        ],
    )
    def test_setitem_extension_types(self, obj, dtype):
        # GH: 34832
        expected = DataFrame({
            "idx": [1, 2, 3],
            "obj": Series([obj] * 3, dtype=dtype)
        })

        df = DataFrame({"idx": [1, 2, 3]})
        df["obj"] = obj

        tm.assert_frame_equal(df, expected)

    @pytest.mark.parametrize(
        "ea_name",
        [
            dtype.name for dtype in ea_registry.dtypes
            # property would require instantiation
            if not isinstance(dtype.name, property)
        ]
        # mypy doesn't allow adding lists of different types
        # https://github.com/python/mypy/issues/5492
        + ["datetime64[ns, UTC]", "period[D]"],  # type: ignore[list-item]
    )
    def test_setitem_with_ea_name(self, ea_name):
        # GH 38386
        result = DataFrame([0])
        result[ea_name] = [1]
        expected = DataFrame({0: [0], ea_name: [1]})
        tm.assert_frame_equal(result, expected)

    def test_setitem_dt64_ndarray_with_NaT_and_diff_time_units(self):
        # GH#7492
        data_ns = np.array([1, "nat"], dtype="datetime64[ns]")
        result = Series(data_ns).to_frame()
        result["new"] = data_ns
        expected = DataFrame({
            0: [1, None],
            "new": [1, None]
        },
                             dtype="datetime64[ns]")
        tm.assert_frame_equal(result, expected)

        # OutOfBoundsDatetime error shouldn't occur
        data_s = np.array([1, "nat"], dtype="datetime64[s]")
        result["new"] = data_s
        expected = DataFrame({
            0: [1, None],
            "new": [1e9, None]
        },
                             dtype="datetime64[ns]")
        tm.assert_frame_equal(result, expected)

    @pytest.mark.parametrize("unit", ["h", "m", "s", "ms", "D", "M", "Y"])
    def test_frame_setitem_datetime64_col_other_units(self, unit):
        # Check that non-nano dt64 values get cast to dt64 on setitem
        #  into a not-yet-existing column
        n = 100

        dtype = np.dtype(f"M8[{unit}]")
        vals = np.arange(n, dtype=np.int64).view(dtype)
        ex_vals = vals.astype("datetime64[ns]")

        df = DataFrame({"ints": np.arange(n)}, index=np.arange(n))
        df[unit] = vals

        assert df[unit].dtype == np.dtype("M8[ns]")
        assert (df[unit].values == ex_vals).all()

    @pytest.mark.parametrize("unit", ["h", "m", "s", "ms", "D", "M", "Y"])
    def test_frame_setitem_existing_datetime64_col_other_units(self, unit):
        # Check that non-nano dt64 values get cast to dt64 on setitem
        #  into an already-existing dt64 column
        n = 100

        dtype = np.dtype(f"M8[{unit}]")
        vals = np.arange(n, dtype=np.int64).view(dtype)
        ex_vals = vals.astype("datetime64[ns]")

        df = DataFrame({"ints": np.arange(n)}, index=np.arange(n))
        df["dates"] = np.arange(n, dtype=np.int64).view("M8[ns]")

        # We overwrite existing dt64 column with new, non-nano dt64 vals
        df["dates"] = vals
        assert (df["dates"].values == ex_vals).all()

    def test_setitem_dt64tz(self, timezone_frame):

        df = timezone_frame
        idx = df["B"].rename("foo")

        # setitem
        df["C"] = idx
        tm.assert_series_equal(df["C"], Series(idx, name="C"))

        df["D"] = "foo"
        df["D"] = idx
        tm.assert_series_equal(df["D"], Series(idx, name="D"))
        del df["D"]

        # assert that A & C are not sharing the same base (e.g. they
        # are copies)
        v1 = df._mgr.arrays[1]
        v2 = df._mgr.arrays[2]
        tm.assert_extension_array_equal(v1, v2)
        v1base = v1._data.base
        v2base = v2._data.base
        assert v1base is None or (id(v1base) != id(v2base))

        # with nan
        df2 = df.copy()
        df2.iloc[1, 1] = NaT
        df2.iloc[1, 2] = NaT
        result = df2["B"]
        tm.assert_series_equal(notna(result),
                               Series([True, False, True], name="B"))
        tm.assert_series_equal(df2.dtypes, df.dtypes)

    def test_setitem_periodindex(self):
        rng = period_range("1/1/2000", periods=5, name="index")
        df = DataFrame(np.random.randn(5, 3), index=rng)

        df["Index"] = rng
        rs = Index(df["Index"])
        tm.assert_index_equal(rs, rng, check_names=False)
        assert rs.name == "Index"
        assert rng.name == "index"

        rs = df.reset_index().set_index("index")
        assert isinstance(rs.index, PeriodIndex)
        tm.assert_index_equal(rs.index, rng)

    def test_setitem_complete_column_with_array(self):
        # GH#37954
        df = DataFrame({"a": ["one", "two", "three"], "b": [1, 2, 3]})
        arr = np.array([[1, 1], [3, 1], [5, 1]])
        df[["c", "d"]] = arr
        expected = DataFrame({
            "a": ["one", "two", "three"],
            "b": [1, 2, 3],
            "c": [1, 3, 5],
            "d": [1, 1, 1],
        })
        expected["c"] = expected["c"].astype(arr.dtype)
        expected["d"] = expected["d"].astype(arr.dtype)
        assert expected["c"].dtype == arr.dtype
        assert expected["d"].dtype == arr.dtype
        tm.assert_frame_equal(df, expected)

    @pytest.mark.parametrize("dtype", ["f8", "i8", "u8"])
    def test_setitem_bool_with_numeric_index(self, dtype):
        # GH#36319
        cols = Index([1, 2, 3], dtype=dtype)
        df = DataFrame(np.random.randn(3, 3), columns=cols)

        df[False] = ["a", "b", "c"]

        expected_cols = Index([1, 2, 3, False], dtype=object)
        if dtype == "f8":
            expected_cols = Index([1.0, 2.0, 3.0, False], dtype=object)

        tm.assert_index_equal(df.columns, expected_cols)

    @pytest.mark.parametrize("indexer", ["B", ["B"]])
    def test_setitem_frame_length_0_str_key(self, indexer):
        # GH#38831
        df = DataFrame(columns=["A", "B"])
        other = DataFrame({"B": [1, 2]})
        df[indexer] = other
        expected = DataFrame({"A": [np.nan] * 2, "B": [1, 2]})
        expected["A"] = expected["A"].astype("object")
        tm.assert_frame_equal(df, expected)

    def test_setitem_frame_duplicate_columns(self, using_array_manager):
        # GH#15695
        cols = ["A", "B", "C"] * 2
        df = DataFrame(index=range(3), columns=cols)
        df.loc[0, "A"] = (0, 3)
        df.loc[:, "B"] = (1, 4)
        df["C"] = (2, 5)
        expected = DataFrame(
            [
                [0, 1, 2, 3, 4, 5],
                [np.nan, 1, 2, np.nan, 4, 5],
                [np.nan, 1, 2, np.nan, 4, 5],
            ],
            dtype="object",
        )

        if using_array_manager:
            # setitem replaces column so changes dtype

            expected.columns = cols
            expected["C"] = expected["C"].astype("int64")
            # TODO(ArrayManager) .loc still overwrites
            expected["B"] = expected["B"].astype("int64")
        else:
            # set these with unique columns to be extra-unambiguous
            expected[2] = expected[2].astype(np.int64)
            expected[5] = expected[5].astype(np.int64)
            expected.columns = cols

        tm.assert_frame_equal(df, expected)

    def test_setitem_frame_duplicate_columns_size_mismatch(self):
        # GH#39510
        cols = ["A", "B", "C"] * 2
        df = DataFrame(index=range(3), columns=cols)
        with pytest.raises(ValueError,
                           match="Columns must be same length as key"):
            df[["A"]] = (0, 3, 5)

        df2 = df.iloc[:, :3]  # unique columns
        with pytest.raises(ValueError,
                           match="Columns must be same length as key"):
            df2[["A"]] = (0, 3, 5)

    @pytest.mark.parametrize("cols", [["a", "b", "c"], ["a", "a", "a"]])
    def test_setitem_df_wrong_column_number(self, cols):
        # GH#38604
        df = DataFrame([[1, 2, 3]], columns=cols)
        rhs = DataFrame([[10, 11]], columns=["d", "e"])
        msg = "Columns must be same length as key"
        with pytest.raises(ValueError, match=msg):
            df["a"] = rhs

    def test_setitem_listlike_indexer_duplicate_columns(self):
        # GH#38604
        df = DataFrame([[1, 2, 3]], columns=["a", "b", "b"])
        rhs = DataFrame([[10, 11, 12]], columns=["a", "b", "b"])
        df[["a", "b"]] = rhs
        expected = DataFrame([[10, 11, 12]], columns=["a", "b", "b"])
        tm.assert_frame_equal(df, expected)

        df[["c", "b"]] = rhs
        expected = DataFrame([[10, 11, 12, 10]], columns=["a", "b", "b", "c"])
        tm.assert_frame_equal(df, expected)

    def test_setitem_listlike_indexer_duplicate_columns_not_equal_length(self):
        # GH#39403
        df = DataFrame([[1, 2, 3]], columns=["a", "b", "b"])
        rhs = DataFrame([[10, 11]], columns=["a", "b"])
        msg = "Columns must be same length as key"
        with pytest.raises(ValueError, match=msg):
            df[["a", "b"]] = rhs

    def test_setitem_intervals(self):

        df = DataFrame({"A": range(10)})
        ser = cut(df["A"], 5)
        assert isinstance(ser.cat.categories, IntervalIndex)

        # B & D end up as Categoricals
        # the remainder are converted to in-line objects
        # containing an IntervalIndex.values
        df["B"] = ser
        df["C"] = np.array(ser)
        df["D"] = ser.values
        df["E"] = np.array(ser.values)
        df["F"] = ser.astype(object)

        assert is_categorical_dtype(df["B"].dtype)
        assert is_interval_dtype(df["B"].cat.categories)
        assert is_categorical_dtype(df["D"].dtype)
        assert is_interval_dtype(df["D"].cat.categories)

        # These go through the Series constructor and so get inferred back
        #  to IntervalDtype
        assert is_interval_dtype(df["C"])
        assert is_interval_dtype(df["E"])

        # But the Series constructor doesn't do inference on Series objects,
        #  so setting df["F"] doesn't get cast back to IntervalDtype
        assert is_object_dtype(df["F"])

        # they compare equal as Index
        # when converted to numpy objects
        c = lambda x: Index(np.array(x))
        tm.assert_index_equal(c(df.B), c(df.B))
        tm.assert_index_equal(c(df.B), c(df.C), check_names=False)
        tm.assert_index_equal(c(df.B), c(df.D), check_names=False)
        tm.assert_index_equal(c(df.C), c(df.D), check_names=False)

        # B & D are the same Series
        tm.assert_series_equal(df["B"], df["B"])
        tm.assert_series_equal(df["B"], df["D"], check_names=False)

        # C & E are the same Series
        tm.assert_series_equal(df["C"], df["C"])
        tm.assert_series_equal(df["C"], df["E"], check_names=False)

    def test_setitem_categorical(self):
        # GH#35369
        df = DataFrame({"h": Series(list("mn")).astype("category")})
        df.h = df.h.cat.reorder_categories(["n", "m"])
        expected = DataFrame(
            {"h": Categorical(["m", "n"]).reorder_categories(["n", "m"])})
        tm.assert_frame_equal(df, expected)

    def test_setitem_with_empty_listlike(self):
        # GH#17101
        index = Index([], name="idx")
        result = DataFrame(columns=["A"], index=index)
        result["A"] = []
        expected = DataFrame(columns=["A"], index=index)
        tm.assert_index_equal(result.index, expected.index)

    @pytest.mark.parametrize(
        "cols, values, expected",
        [
            (["C", "D", "D", "a"], [1, 2, 3, 4], 4),  # with duplicates
            (["D", "C", "D", "a"], [1, 2, 3, 4], 4),  # mixed order
            (["C", "B", "B", "a"], [1, 2, 3, 4], 4),  # other duplicate cols
            (["C", "B", "a"], [1, 2, 3], 3),  # no duplicates
            (["B", "C", "a"], [3, 2, 1], 1),  # alphabetical order
            (["C", "a", "B"], [3, 2, 1], 2),  # in the middle
        ],
    )
    def test_setitem_same_column(self, cols, values, expected):
        # GH#23239
        df = DataFrame([values], columns=cols)
        df["a"] = df["a"]
        result = df["a"].values[0]
        assert result == expected

    def test_setitem_multi_index(self):
        # GH#7655, test that assigning to a sub-frame of a frame
        # with multi-index columns aligns both rows and columns
        it = ["jim", "joe", "jolie"], ["first",
                                       "last"], ["left", "center", "right"]

        cols = MultiIndex.from_product(it)
        index = date_range("20141006", periods=20)
        vals = np.random.randint(1, 1000, (len(index), len(cols)))
        df = DataFrame(vals, columns=cols, index=index)

        i, j = df.index.values.copy(), it[-1][:]

        np.random.shuffle(i)
        df["jim"] = df["jolie"].loc[i, ::-1]
        tm.assert_frame_equal(df["jim"], df["jolie"])

        np.random.shuffle(j)
        df[("joe", "first")] = df[("jolie", "last")].loc[i, j]
        tm.assert_frame_equal(df[("joe", "first")], df[("jolie", "last")])

        np.random.shuffle(j)
        df[("joe", "last")] = df[("jolie", "first")].loc[i, j]
        tm.assert_frame_equal(df[("joe", "last")], df[("jolie", "first")])

    @pytest.mark.parametrize(
        "columns,box,expected",
        [
            (
                ["A", "B", "C", "D"],
                7,
                DataFrame(
                    [[7, 7, 7, 7], [7, 7, 7, 7], [7, 7, 7, 7]],
                    columns=["A", "B", "C", "D"],
                ),
            ),
            (
                ["C", "D"],
                [7, 8],
                DataFrame(
                    [[1, 2, 7, 8], [3, 4, 7, 8], [5, 6, 7, 8]],
                    columns=["A", "B", "C", "D"],
                ),
            ),
            (
                ["A", "B", "C"],
                np.array([7, 8, 9], dtype=np.int64),
                DataFrame([[7, 8, 9], [7, 8, 9], [7, 8, 9]],
                          columns=["A", "B", "C"]),
            ),
            (
                ["B", "C", "D"],
                [[7, 8, 9], [10, 11, 12], [13, 14, 15]],
                DataFrame(
                    [[1, 7, 8, 9], [3, 10, 11, 12], [5, 13, 14, 15]],
                    columns=["A", "B", "C", "D"],
                ),
            ),
            (
                ["C", "A", "D"],
                np.array([[7, 8, 9], [10, 11, 12], [13, 14, 15]],
                         dtype=np.int64),
                DataFrame(
                    [[8, 2, 7, 9], [11, 4, 10, 12], [14, 6, 13, 15]],
                    columns=["A", "B", "C", "D"],
                ),
            ),
            (
                ["A", "C"],
                DataFrame([[7, 8], [9, 10], [11, 12]], columns=["A", "C"]),
                DataFrame([[7, 2, 8], [9, 4, 10], [11, 6, 12]],
                          columns=["A", "B", "C"]),
            ),
        ],
    )
    def test_setitem_list_missing_columns(self, columns, box, expected):
        # GH#29334
        df = DataFrame([[1, 2], [3, 4], [5, 6]], columns=["A", "B"])
        df[columns] = box
        tm.assert_frame_equal(df, expected)

    def test_setitem_list_of_tuples(self, float_frame):
        tuples = list(zip(float_frame["A"], float_frame["B"]))
        float_frame["tuples"] = tuples

        result = float_frame["tuples"]
        expected = Series(tuples, index=float_frame.index, name="tuples")
        tm.assert_series_equal(result, expected)
Ejemplo n.º 24
0
    def test_contains(self):
        rng = period_range('2007-01', freq='M', periods=10)

        assert Period('2007-01', freq='M') in rng
        assert not Period('2007-01', freq='D') in rng
        assert not Period('2007-01', freq='2M') in rng
Ejemplo n.º 25
0
def decode(obj):
    """
    Decoder for deserializing numpy data types.
    """

    typ = obj.get('typ')
    if typ is None:
        return obj
    elif typ == 'timestamp':
        return Timestamp(obj['value'], tz=obj['tz'], offset=obj['offset'])
    elif typ == 'period':
        return Period(ordinal=obj['ordinal'], freq=obj['freq'])
    elif typ == 'index':
        dtype = dtype_for(obj['dtype'])
        data = unconvert(obj['data'], np.typeDict[obj['dtype']],
                         obj.get('compress'))
        return globals()[obj['klass']](data, dtype=dtype, name=obj['name'])
    elif typ == 'multi_index':
        data = unconvert(obj['data'], np.typeDict[obj['dtype']],
                         obj.get('compress'))
        data = [tuple(x) for x in data]
        return globals()[obj['klass']].from_tuples(data, names=obj['names'])
    elif typ == 'period_index':
        data = unconvert(obj['data'], np.int64, obj.get('compress'))
        d = dict(name=obj['name'], freq=obj['freq'])
        return globals()[obj['klass']](data, **d)
    elif typ == 'datetime_index':
        data = unconvert(obj['data'], np.int64, obj.get('compress'))
        d = dict(name=obj['name'], freq=obj['freq'], verify_integrity=False)
        result = globals()[obj['klass']](data, **d)
        tz = obj['tz']

        # reverse tz conversion
        if tz is not None:
            result = result.tz_localize('UTC').tz_convert(tz)
        return result

    elif typ == 'series':
        dtype = dtype_for(obj['dtype'])
        index = obj['index']
        return globals()[obj['klass']](unconvert(obj['data'], dtype,
                                                 obj['compress']),
                                       index=index,
                                       name=obj['name'])
    elif typ == 'block_manager':
        axes = obj['axes']

        def create_block(b):
            values = unconvert(b['values'], dtype_for(b['dtype']),
                               b['compress']).reshape(b['shape'])
            return make_block(values=values,
                              klass=getattr(internals, b['klass']),
                              placement=axes[0].get_indexer(b['items']))

        blocks = [create_block(b) for b in obj['blocks']]
        return globals()[obj['klass']](BlockManager(blocks, axes))
    elif typ == 'datetime':
        return parse(obj['data'])
    elif typ == 'datetime64':
        return np.datetime64(parse(obj['data']))
    elif typ == 'date':
        return parse(obj['data']).date()
    elif typ == 'timedelta':
        return timedelta(*obj['data'])
    elif typ == 'timedelta64':
        return np.timedelta64(int(obj['data']))
    #elif typ == 'sparse_series':
    #    dtype = dtype_for(obj['dtype'])
    #    return globals()[obj['klass']](
    #        unconvert(obj['sp_values'], dtype, obj['compress']),
    #        sparse_index=obj['sp_index'], index=obj['index'],
    #        fill_value=obj['fill_value'], kind=obj['kind'], name=obj['name'])
    #elif typ == 'sparse_dataframe':
    #    return globals()[obj['klass']](
    #        obj['data'], columns=obj['columns'],
    #        default_fill_value=obj['default_fill_value'],
    #        default_kind=obj['default_kind']
    #    )
    #elif typ == 'sparse_panel':
    #    return globals()[obj['klass']](
    #        obj['data'], items=obj['items'],
    #        default_fill_value=obj['default_fill_value'],
    #        default_kind=obj['default_kind'])
    elif typ == 'block_index':
        return globals()[obj['klass']](obj['length'], obj['blocs'],
                                       obj['blengths'])
    elif typ == 'int_index':
        return globals()[obj['klass']](obj['length'], obj['indices'])
    elif typ == 'ndarray':
        return unconvert(obj['data'], np.typeDict[obj['dtype']],
                         obj.get('compress')).reshape(obj['shape'])
    elif typ == 'np_scalar':
        if obj.get('sub_typ') == 'np_complex':
            return c2f(obj['real'], obj['imag'], obj['dtype'])
        else:
            dtype = dtype_for(obj['dtype'])
            try:
                return dtype(obj['data'])
            except:
                return dtype.type(obj['data'])
    elif typ == 'np_complex':
        return complex(obj['real'] + '+' + obj['imag'] + 'j')
    elif isinstance(obj, (dict, list, set)):
        return obj
    else:
        return obj
Ejemplo n.º 26
0
    def test_period_index_length(self):
        pi = period_range(freq='A', start='1/1/2001', end='12/1/2009')
        assert len(pi) == 9

        pi = period_range(freq='Q', start='1/1/2001', end='12/1/2009')
        assert len(pi) == 4 * 9

        pi = period_range(freq='M', start='1/1/2001', end='12/1/2009')
        assert len(pi) == 12 * 9

        start = Period('02-Apr-2005', 'B')
        i1 = period_range(start=start, periods=20)
        assert len(i1) == 20
        assert i1.freq == start.freq
        assert i1[0] == start

        end_intv = Period('2006-12-31', 'W')
        i1 = period_range(end=end_intv, periods=10)
        assert len(i1) == 10
        assert i1.freq == end_intv.freq
        assert i1[-1] == end_intv

        end_intv = Period('2006-12-31', '1w')
        i2 = period_range(end=end_intv, periods=10)
        assert len(i1) == len(i2)
        assert (i1 == i2).all()
        assert i1.freq == i2.freq

        end_intv = Period('2006-12-31', ('w', 1))
        i2 = period_range(end=end_intv, periods=10)
        assert len(i1) == len(i2)
        assert (i1 == i2).all()
        assert i1.freq == i2.freq

        try:
            period_range(start=start, end=end_intv)
            raise AssertionError('Cannot allow mixed freq for start and end')
        except ValueError:
            pass

        end_intv = Period('2005-05-01', 'B')
        i1 = period_range(start=start, end=end_intv)

        try:
            period_range(start=start)
            raise AssertionError(
                'Must specify periods if missing start or end')
        except ValueError:
            pass

        # infer freq from first element
        i2 = PeriodIndex([end_intv, Period('2005-05-05', 'B')])
        assert len(i2) == 2
        assert i2[0] == end_intv

        i2 = PeriodIndex(np.array([end_intv, Period('2005-05-05', 'B')]))
        assert len(i2) == 2
        assert i2[0] == end_intv

        # Mixed freq should fail
        vals = [end_intv, Period('2006-12-31', 'w')]
        pytest.raises(ValueError, PeriodIndex, vals)
        vals = np.array(vals)
        pytest.raises(ValueError, PeriodIndex, vals)
Ejemplo n.º 27
0
 def test_constructor_invalid(self):
     with tm.assert_raises_regex(TypeError, 'Cannot convert input'):
         Timestamp(slice(2))
     with tm.assert_raises_regex(ValueError, 'Cannot convert Period'):
         Timestamp(Period('1000-01-01'))
Ejemplo n.º 28
0
 def time_period_constructor(self, freq, is_offset):
     Period("2012-06-01", freq=freq)
Ejemplo n.º 29
0
    def test_conv_quarterly(self):
        # frequency conversion tests: from Quarterly Frequency

        ival_Q = Period(freq='Q', year=2007, quarter=1)
        ival_Q_end_of_year = Period(freq='Q', year=2007, quarter=4)

        ival_QEJAN = Period(freq="Q-JAN", year=2007, quarter=1)
        ival_QEJUN = Period(freq="Q-JUN", year=2007, quarter=1)

        ival_Q_to_A = Period(freq='A', year=2007)
        ival_Q_to_M_start = Period(freq='M', year=2007, month=1)
        ival_Q_to_M_end = Period(freq='M', year=2007, month=3)
        ival_Q_to_W_start = Period(freq='W', year=2007, month=1, day=1)
        ival_Q_to_W_end = Period(freq='W', year=2007, month=3, day=31)
        ival_Q_to_B_start = Period(freq='B', year=2007, month=1, day=1)
        ival_Q_to_B_end = Period(freq='B', year=2007, month=3, day=30)
        ival_Q_to_D_start = Period(freq='D', year=2007, month=1, day=1)
        ival_Q_to_D_end = Period(freq='D', year=2007, month=3, day=31)
        ival_Q_to_H_start = Period(freq='H', year=2007, month=1, day=1, hour=0)
        ival_Q_to_H_end = Period(freq='H', year=2007, month=3, day=31, hour=23)
        ival_Q_to_T_start = Period(freq='Min', year=2007, month=1, day=1,
                                   hour=0, minute=0)
        ival_Q_to_T_end = Period(freq='Min', year=2007, month=3, day=31,
                                 hour=23, minute=59)
        ival_Q_to_S_start = Period(freq='S', year=2007, month=1, day=1, hour=0,
                                   minute=0, second=0)
        ival_Q_to_S_end = Period(freq='S', year=2007, month=3, day=31, hour=23,
                                 minute=59, second=59)

        ival_QEJAN_to_D_start = Period(freq='D', year=2006, month=2, day=1)
        ival_QEJAN_to_D_end = Period(freq='D', year=2006, month=4, day=30)

        ival_QEJUN_to_D_start = Period(freq='D', year=2006, month=7, day=1)
        ival_QEJUN_to_D_end = Period(freq='D', year=2006, month=9, day=30)

        assert ival_Q.asfreq('A') == ival_Q_to_A
        assert ival_Q_end_of_year.asfreq('A') == ival_Q_to_A

        assert ival_Q.asfreq('M', 'S') == ival_Q_to_M_start
        assert ival_Q.asfreq('M', 'E') == ival_Q_to_M_end
        assert ival_Q.asfreq('W', 'S') == ival_Q_to_W_start
        assert ival_Q.asfreq('W', 'E') == ival_Q_to_W_end
        assert ival_Q.asfreq('B', 'S') == ival_Q_to_B_start
        assert ival_Q.asfreq('B', 'E') == ival_Q_to_B_end
        assert ival_Q.asfreq('D', 'S') == ival_Q_to_D_start
        assert ival_Q.asfreq('D', 'E') == ival_Q_to_D_end
        assert ival_Q.asfreq('H', 'S') == ival_Q_to_H_start
        assert ival_Q.asfreq('H', 'E') == ival_Q_to_H_end
        assert ival_Q.asfreq('Min', 'S') == ival_Q_to_T_start
        assert ival_Q.asfreq('Min', 'E') == ival_Q_to_T_end
        assert ival_Q.asfreq('S', 'S') == ival_Q_to_S_start
        assert ival_Q.asfreq('S', 'E') == ival_Q_to_S_end

        assert ival_QEJAN.asfreq('D', 'S') == ival_QEJAN_to_D_start
        assert ival_QEJAN.asfreq('D', 'E') == ival_QEJAN_to_D_end
        assert ival_QEJUN.asfreq('D', 'S') == ival_QEJUN_to_D_start
        assert ival_QEJUN.asfreq('D', 'E') == ival_QEJUN_to_D_end

        assert ival_Q.asfreq('Q') == ival_Q
Ejemplo n.º 30
0
    def test_conv_quarterly(self):
        # frequency conversion tests: from Quarterly Frequency

        ival_Q = Period(freq="Q", year=2007, quarter=1)
        ival_Q_end_of_year = Period(freq="Q", year=2007, quarter=4)

        ival_QEJAN = Period(freq="Q-JAN", year=2007, quarter=1)
        ival_QEJUN = Period(freq="Q-JUN", year=2007, quarter=1)

        ival_Q_to_A = Period(freq="A", year=2007)
        ival_Q_to_M_start = Period(freq="M", year=2007, month=1)
        ival_Q_to_M_end = Period(freq="M", year=2007, month=3)
        ival_Q_to_W_start = Period(freq="W", year=2007, month=1, day=1)
        ival_Q_to_W_end = Period(freq="W", year=2007, month=3, day=31)
        ival_Q_to_B_start = Period(freq="B", year=2007, month=1, day=1)
        ival_Q_to_B_end = Period(freq="B", year=2007, month=3, day=30)
        ival_Q_to_D_start = Period(freq="D", year=2007, month=1, day=1)
        ival_Q_to_D_end = Period(freq="D", year=2007, month=3, day=31)
        ival_Q_to_H_start = Period(freq="H", year=2007, month=1, day=1, hour=0)
        ival_Q_to_H_end = Period(freq="H", year=2007, month=3, day=31, hour=23)
        ival_Q_to_T_start = Period(freq="Min",
                                   year=2007,
                                   month=1,
                                   day=1,
                                   hour=0,
                                   minute=0)
        ival_Q_to_T_end = Period(freq="Min",
                                 year=2007,
                                 month=3,
                                 day=31,
                                 hour=23,
                                 minute=59)
        ival_Q_to_S_start = Period(freq="S",
                                   year=2007,
                                   month=1,
                                   day=1,
                                   hour=0,
                                   minute=0,
                                   second=0)
        ival_Q_to_S_end = Period(freq="S",
                                 year=2007,
                                 month=3,
                                 day=31,
                                 hour=23,
                                 minute=59,
                                 second=59)

        ival_QEJAN_to_D_start = Period(freq="D", year=2006, month=2, day=1)
        ival_QEJAN_to_D_end = Period(freq="D", year=2006, month=4, day=30)

        ival_QEJUN_to_D_start = Period(freq="D", year=2006, month=7, day=1)
        ival_QEJUN_to_D_end = Period(freq="D", year=2006, month=9, day=30)

        assert ival_Q.asfreq("A") == ival_Q_to_A
        assert ival_Q_end_of_year.asfreq("A") == ival_Q_to_A

        assert ival_Q.asfreq("M", "S") == ival_Q_to_M_start
        assert ival_Q.asfreq("M", "E") == ival_Q_to_M_end
        assert ival_Q.asfreq("W", "S") == ival_Q_to_W_start
        assert ival_Q.asfreq("W", "E") == ival_Q_to_W_end
        assert ival_Q.asfreq("B", "S") == ival_Q_to_B_start
        assert ival_Q.asfreq("B", "E") == ival_Q_to_B_end
        assert ival_Q.asfreq("D", "S") == ival_Q_to_D_start
        assert ival_Q.asfreq("D", "E") == ival_Q_to_D_end
        assert ival_Q.asfreq("H", "S") == ival_Q_to_H_start
        assert ival_Q.asfreq("H", "E") == ival_Q_to_H_end
        assert ival_Q.asfreq("Min", "S") == ival_Q_to_T_start
        assert ival_Q.asfreq("Min", "E") == ival_Q_to_T_end
        assert ival_Q.asfreq("S", "S") == ival_Q_to_S_start
        assert ival_Q.asfreq("S", "E") == ival_Q_to_S_end

        assert ival_QEJAN.asfreq("D", "S") == ival_QEJAN_to_D_start
        assert ival_QEJAN.asfreq("D", "E") == ival_QEJAN_to_D_end
        assert ival_QEJUN.asfreq("D", "S") == ival_QEJUN_to_D_start
        assert ival_QEJUN.asfreq("D", "E") == ival_QEJUN_to_D_end

        assert ival_Q.asfreq("Q") == ival_Q
Ejemplo n.º 31
0
    def test_contains_freq_mismatch(self):
        rng = period_range("2007-01", freq="M", periods=10)

        assert Period("2007-01", freq="M") in rng
        assert not Period("2007-01", freq="D") in rng
        assert not Period("2007-01", freq="2M") in rng
Ejemplo n.º 32
0
    def test_conv_monthly(self):
        # frequency conversion tests: from Monthly Frequency

        ival_M = Period(freq="M", year=2007, month=1)
        ival_M_end_of_year = Period(freq="M", year=2007, month=12)
        ival_M_end_of_quarter = Period(freq="M", year=2007, month=3)
        ival_M_to_A = Period(freq="A", year=2007)
        ival_M_to_Q = Period(freq="Q", year=2007, quarter=1)
        ival_M_to_W_start = Period(freq="W", year=2007, month=1, day=1)
        ival_M_to_W_end = Period(freq="W", year=2007, month=1, day=31)
        ival_M_to_B_start = Period(freq="B", year=2007, month=1, day=1)
        ival_M_to_B_end = Period(freq="B", year=2007, month=1, day=31)
        ival_M_to_D_start = Period(freq="D", year=2007, month=1, day=1)
        ival_M_to_D_end = Period(freq="D", year=2007, month=1, day=31)
        ival_M_to_H_start = Period(freq="H", year=2007, month=1, day=1, hour=0)
        ival_M_to_H_end = Period(freq="H", year=2007, month=1, day=31, hour=23)
        ival_M_to_T_start = Period(freq="Min",
                                   year=2007,
                                   month=1,
                                   day=1,
                                   hour=0,
                                   minute=0)
        ival_M_to_T_end = Period(freq="Min",
                                 year=2007,
                                 month=1,
                                 day=31,
                                 hour=23,
                                 minute=59)
        ival_M_to_S_start = Period(freq="S",
                                   year=2007,
                                   month=1,
                                   day=1,
                                   hour=0,
                                   minute=0,
                                   second=0)
        ival_M_to_S_end = Period(freq="S",
                                 year=2007,
                                 month=1,
                                 day=31,
                                 hour=23,
                                 minute=59,
                                 second=59)

        assert ival_M.asfreq("A") == ival_M_to_A
        assert ival_M_end_of_year.asfreq("A") == ival_M_to_A
        assert ival_M.asfreq("Q") == ival_M_to_Q
        assert ival_M_end_of_quarter.asfreq("Q") == ival_M_to_Q

        assert ival_M.asfreq("W", "S") == ival_M_to_W_start
        assert ival_M.asfreq("W", "E") == ival_M_to_W_end
        assert ival_M.asfreq("B", "S") == ival_M_to_B_start
        assert ival_M.asfreq("B", "E") == ival_M_to_B_end
        assert ival_M.asfreq("D", "S") == ival_M_to_D_start
        assert ival_M.asfreq("D", "E") == ival_M_to_D_end
        assert ival_M.asfreq("H", "S") == ival_M_to_H_start
        assert ival_M.asfreq("H", "E") == ival_M_to_H_end
        assert ival_M.asfreq("Min", "S") == ival_M_to_T_start
        assert ival_M.asfreq("Min", "E") == ival_M_to_T_end
        assert ival_M.asfreq("S", "S") == ival_M_to_S_start
        assert ival_M.asfreq("S", "E") == ival_M_to_S_end

        assert ival_M.asfreq("M") == ival_M
Ejemplo n.º 33
0
    def test_conv_daily(self):
        # frequency conversion tests: from Business Frequency"

        ival_D = Period(freq='D', year=2007, month=1, day=1)
        ival_D_end_of_year = Period(freq='D', year=2007, month=12, day=31)
        ival_D_end_of_quarter = Period(freq='D', year=2007, month=3, day=31)
        ival_D_end_of_month = Period(freq='D', year=2007, month=1, day=31)
        ival_D_end_of_week = Period(freq='D', year=2007, month=1, day=7)

        ival_D_friday = Period(freq='D', year=2007, month=1, day=5)
        ival_D_saturday = Period(freq='D', year=2007, month=1, day=6)
        ival_D_sunday = Period(freq='D', year=2007, month=1, day=7)

        # TODO: unused?
        # ival_D_monday = Period(freq='D', year=2007, month=1, day=8)

        ival_B_friday = Period(freq='B', year=2007, month=1, day=5)
        ival_B_monday = Period(freq='B', year=2007, month=1, day=8)

        ival_D_to_A = Period(freq='A', year=2007)

        ival_Deoq_to_AJAN = Period(freq='A-JAN', year=2008)
        ival_Deoq_to_AJUN = Period(freq='A-JUN', year=2007)
        ival_Deoq_to_ADEC = Period(freq='A-DEC', year=2007)

        ival_D_to_QEJAN = Period(freq="Q-JAN", year=2007, quarter=4)
        ival_D_to_QEJUN = Period(freq="Q-JUN", year=2007, quarter=3)
        ival_D_to_QEDEC = Period(freq="Q-DEC", year=2007, quarter=1)

        ival_D_to_M = Period(freq='M', year=2007, month=1)
        ival_D_to_W = Period(freq='W', year=2007, month=1, day=7)

        ival_D_to_H_start = Period(freq='H', year=2007, month=1, day=1, hour=0)
        ival_D_to_H_end = Period(freq='H', year=2007, month=1, day=1, hour=23)
        ival_D_to_T_start = Period(freq='Min', year=2007, month=1, day=1,
                                   hour=0, minute=0)
        ival_D_to_T_end = Period(freq='Min', year=2007, month=1, day=1,
                                 hour=23, minute=59)
        ival_D_to_S_start = Period(freq='S', year=2007, month=1, day=1, hour=0,
                                   minute=0, second=0)
        ival_D_to_S_end = Period(freq='S', year=2007, month=1, day=1, hour=23,
                                 minute=59, second=59)

        assert ival_D.asfreq('A') == ival_D_to_A

        assert ival_D_end_of_quarter.asfreq('A-JAN') == ival_Deoq_to_AJAN
        assert ival_D_end_of_quarter.asfreq('A-JUN') == ival_Deoq_to_AJUN
        assert ival_D_end_of_quarter.asfreq('A-DEC') == ival_Deoq_to_ADEC

        assert ival_D_end_of_year.asfreq('A') == ival_D_to_A
        assert ival_D_end_of_quarter.asfreq('Q') == ival_D_to_QEDEC
        assert ival_D.asfreq("Q-JAN") == ival_D_to_QEJAN
        assert ival_D.asfreq("Q-JUN") == ival_D_to_QEJUN
        assert ival_D.asfreq("Q-DEC") == ival_D_to_QEDEC
        assert ival_D.asfreq('M') == ival_D_to_M
        assert ival_D_end_of_month.asfreq('M') == ival_D_to_M
        assert ival_D.asfreq('W') == ival_D_to_W
        assert ival_D_end_of_week.asfreq('W') == ival_D_to_W

        assert ival_D_friday.asfreq('B') == ival_B_friday
        assert ival_D_saturday.asfreq('B', 'S') == ival_B_friday
        assert ival_D_saturday.asfreq('B', 'E') == ival_B_monday
        assert ival_D_sunday.asfreq('B', 'S') == ival_B_friday
        assert ival_D_sunday.asfreq('B', 'E') == ival_B_monday

        assert ival_D.asfreq('H', 'S') == ival_D_to_H_start
        assert ival_D.asfreq('H', 'E') == ival_D_to_H_end
        assert ival_D.asfreq('Min', 'S') == ival_D_to_T_start
        assert ival_D.asfreq('Min', 'E') == ival_D_to_T_end
        assert ival_D.asfreq('S', 'S') == ival_D_to_S_start
        assert ival_D.asfreq('S', 'E') == ival_D_to_S_end

        assert ival_D.asfreq('D') == ival_D
Ejemplo n.º 34
0
    def test_conv_weekly(self):
        # frequency conversion tests: from Weekly Frequency
        ival_W = Period(freq="W", year=2007, month=1, day=1)

        ival_WSUN = Period(freq="W", year=2007, month=1, day=7)
        ival_WSAT = Period(freq="W-SAT", year=2007, month=1, day=6)
        ival_WFRI = Period(freq="W-FRI", year=2007, month=1, day=5)
        ival_WTHU = Period(freq="W-THU", year=2007, month=1, day=4)
        ival_WWED = Period(freq="W-WED", year=2007, month=1, day=3)
        ival_WTUE = Period(freq="W-TUE", year=2007, month=1, day=2)
        ival_WMON = Period(freq="W-MON", year=2007, month=1, day=1)

        ival_WSUN_to_D_start = Period(freq="D", year=2007, month=1, day=1)
        ival_WSUN_to_D_end = Period(freq="D", year=2007, month=1, day=7)
        ival_WSAT_to_D_start = Period(freq="D", year=2006, month=12, day=31)
        ival_WSAT_to_D_end = Period(freq="D", year=2007, month=1, day=6)
        ival_WFRI_to_D_start = Period(freq="D", year=2006, month=12, day=30)
        ival_WFRI_to_D_end = Period(freq="D", year=2007, month=1, day=5)
        ival_WTHU_to_D_start = Period(freq="D", year=2006, month=12, day=29)
        ival_WTHU_to_D_end = Period(freq="D", year=2007, month=1, day=4)
        ival_WWED_to_D_start = Period(freq="D", year=2006, month=12, day=28)
        ival_WWED_to_D_end = Period(freq="D", year=2007, month=1, day=3)
        ival_WTUE_to_D_start = Period(freq="D", year=2006, month=12, day=27)
        ival_WTUE_to_D_end = Period(freq="D", year=2007, month=1, day=2)
        ival_WMON_to_D_start = Period(freq="D", year=2006, month=12, day=26)
        ival_WMON_to_D_end = Period(freq="D", year=2007, month=1, day=1)

        ival_W_end_of_year = Period(freq="W", year=2007, month=12, day=31)
        ival_W_end_of_quarter = Period(freq="W", year=2007, month=3, day=31)
        ival_W_end_of_month = Period(freq="W", year=2007, month=1, day=31)
        ival_W_to_A = Period(freq="A", year=2007)
        ival_W_to_Q = Period(freq="Q", year=2007, quarter=1)
        ival_W_to_M = Period(freq="M", year=2007, month=1)

        if Period(freq="D", year=2007, month=12, day=31).weekday == 6:
            ival_W_to_A_end_of_year = Period(freq="A", year=2007)
        else:
            ival_W_to_A_end_of_year = Period(freq="A", year=2008)

        if Period(freq="D", year=2007, month=3, day=31).weekday == 6:
            ival_W_to_Q_end_of_quarter = Period(freq="Q", year=2007, quarter=1)
        else:
            ival_W_to_Q_end_of_quarter = Period(freq="Q", year=2007, quarter=2)

        if Period(freq="D", year=2007, month=1, day=31).weekday == 6:
            ival_W_to_M_end_of_month = Period(freq="M", year=2007, month=1)
        else:
            ival_W_to_M_end_of_month = Period(freq="M", year=2007, month=2)

        ival_W_to_B_start = Period(freq="B", year=2007, month=1, day=1)
        ival_W_to_B_end = Period(freq="B", year=2007, month=1, day=5)
        ival_W_to_D_start = Period(freq="D", year=2007, month=1, day=1)
        ival_W_to_D_end = Period(freq="D", year=2007, month=1, day=7)
        ival_W_to_H_start = Period(freq="H", year=2007, month=1, day=1, hour=0)
        ival_W_to_H_end = Period(freq="H", year=2007, month=1, day=7, hour=23)
        ival_W_to_T_start = Period(freq="Min",
                                   year=2007,
                                   month=1,
                                   day=1,
                                   hour=0,
                                   minute=0)
        ival_W_to_T_end = Period(freq="Min",
                                 year=2007,
                                 month=1,
                                 day=7,
                                 hour=23,
                                 minute=59)
        ival_W_to_S_start = Period(freq="S",
                                   year=2007,
                                   month=1,
                                   day=1,
                                   hour=0,
                                   minute=0,
                                   second=0)
        ival_W_to_S_end = Period(freq="S",
                                 year=2007,
                                 month=1,
                                 day=7,
                                 hour=23,
                                 minute=59,
                                 second=59)

        assert ival_W.asfreq("A") == ival_W_to_A
        assert ival_W_end_of_year.asfreq("A") == ival_W_to_A_end_of_year

        assert ival_W.asfreq("Q") == ival_W_to_Q
        assert ival_W_end_of_quarter.asfreq("Q") == ival_W_to_Q_end_of_quarter

        assert ival_W.asfreq("M") == ival_W_to_M
        assert ival_W_end_of_month.asfreq("M") == ival_W_to_M_end_of_month

        assert ival_W.asfreq("B", "S") == ival_W_to_B_start
        assert ival_W.asfreq("B", "E") == ival_W_to_B_end

        assert ival_W.asfreq("D", "S") == ival_W_to_D_start
        assert ival_W.asfreq("D", "E") == ival_W_to_D_end

        assert ival_WSUN.asfreq("D", "S") == ival_WSUN_to_D_start
        assert ival_WSUN.asfreq("D", "E") == ival_WSUN_to_D_end
        assert ival_WSAT.asfreq("D", "S") == ival_WSAT_to_D_start
        assert ival_WSAT.asfreq("D", "E") == ival_WSAT_to_D_end
        assert ival_WFRI.asfreq("D", "S") == ival_WFRI_to_D_start
        assert ival_WFRI.asfreq("D", "E") == ival_WFRI_to_D_end
        assert ival_WTHU.asfreq("D", "S") == ival_WTHU_to_D_start
        assert ival_WTHU.asfreq("D", "E") == ival_WTHU_to_D_end
        assert ival_WWED.asfreq("D", "S") == ival_WWED_to_D_start
        assert ival_WWED.asfreq("D", "E") == ival_WWED_to_D_end
        assert ival_WTUE.asfreq("D", "S") == ival_WTUE_to_D_start
        assert ival_WTUE.asfreq("D", "E") == ival_WTUE_to_D_end
        assert ival_WMON.asfreq("D", "S") == ival_WMON_to_D_start
        assert ival_WMON.asfreq("D", "E") == ival_WMON_to_D_end

        assert ival_W.asfreq("H", "S") == ival_W_to_H_start
        assert ival_W.asfreq("H", "E") == ival_W_to_H_end
        assert ival_W.asfreq("Min", "S") == ival_W_to_T_start
        assert ival_W.asfreq("Min", "E") == ival_W_to_T_end
        assert ival_W.asfreq("S", "S") == ival_W_to_S_start
        assert ival_W.asfreq("S", "E") == ival_W_to_S_end

        assert ival_W.asfreq("W") == ival_W

        msg = INVALID_FREQ_ERR_MSG
        with pytest.raises(ValueError, match=msg):
            ival_W.asfreq("WK")
Ejemplo n.º 35
0
    def test_asfreq_mult(self):
        # normal freq to mult freq
        p = Period(freq='A', year=2007)
        # ordinal will not change
        for freq in ['3A', offsets.YearEnd(3)]:
            result = p.asfreq(freq)
            expected = Period('2007', freq='3A')

            assert result == expected
            assert result.ordinal == expected.ordinal
            assert result.freq == expected.freq
        # ordinal will not change
        for freq in ['3A', offsets.YearEnd(3)]:
            result = p.asfreq(freq, how='S')
            expected = Period('2007', freq='3A')

            assert result == expected
            assert result.ordinal == expected.ordinal
            assert result.freq == expected.freq

        # mult freq to normal freq
        p = Period(freq='3A', year=2007)
        # ordinal will change because how=E is the default
        for freq in ['A', offsets.YearEnd()]:
            result = p.asfreq(freq)
            expected = Period('2009', freq='A')

            assert result == expected
            assert result.ordinal == expected.ordinal
            assert result.freq == expected.freq
        # ordinal will not change
        for freq in ['A', offsets.YearEnd()]:
            result = p.asfreq(freq, how='S')
            expected = Period('2007', freq='A')

            assert result == expected
            assert result.ordinal == expected.ordinal
            assert result.freq == expected.freq

        p = Period(freq='A', year=2007)
        for freq in ['2M', offsets.MonthEnd(2)]:
            result = p.asfreq(freq)
            expected = Period('2007-12', freq='2M')

            assert result == expected
            assert result.ordinal == expected.ordinal
            assert result.freq == expected.freq
        for freq in ['2M', offsets.MonthEnd(2)]:
            result = p.asfreq(freq, how='S')
            expected = Period('2007-01', freq='2M')

            assert result == expected
            assert result.ordinal == expected.ordinal
            assert result.freq == expected.freq

        p = Period(freq='3A', year=2007)
        for freq in ['2M', offsets.MonthEnd(2)]:
            result = p.asfreq(freq)
            expected = Period('2009-12', freq='2M')

            assert result == expected
            assert result.ordinal == expected.ordinal
            assert result.freq == expected.freq
        for freq in ['2M', offsets.MonthEnd(2)]:
            result = p.asfreq(freq, how='S')
            expected = Period('2007-01', freq='2M')

            assert result == expected
            assert result.ordinal == expected.ordinal
            assert result.freq == expected.freq
Ejemplo n.º 36
0
 def test_to_timestamp_out_of_bounds(self):
     # GH#19643, used to incorrectly give Timestamp in 1754
     per = Period("0001-01-01", freq="B")
     msg = "Out of bounds nanosecond timestamp"
     with pytest.raises(OutOfBoundsDatetime, match=msg):
         per.to_timestamp()
Ejemplo n.º 37
0
    65znX3uRNG  1.528446  0.160416 -0.109635 -0.032987
    eCOBvKqf3e  0.235281  1.622222  0.781255  0.392871
    xSucinXxuV -1.263557  0.252799 -0.552247  0.400426

    [30 rows x 4 columns]
    """
    return DataFrame(tm.getSeriesData())


# ----------------------------------------------------------------
# Scalars
# ----------------------------------------------------------------
@pytest.fixture(params=[
    (Interval(left=0, right=5), IntervalDtype("int64")),
    (Interval(left=0.1, right=0.5), IntervalDtype("float64")),
    (Period("2012-01", freq="M"), "period[M]"),
    (Period("2012-02-01", freq="D"), "period[D]"),
    (
        Timestamp("2011-01-01", tz="US/Eastern"),
        DatetimeTZDtype(tz="US/Eastern"),
    ),
    (Timedelta(seconds=500), "timedelta64[ns]"),
])
def ea_scalar_and_dtype(request):
    return request.param


# ----------------------------------------------------------------
# Operators & Operations
# ----------------------------------------------------------------
_all_arithmetic_operators = [
Ejemplo n.º 38
0
    def test_conv_annual(self):
        # frequency conversion tests: from Annual Frequency

        ival_A = Period(freq="A", year=2007)

        ival_AJAN = Period(freq="A-JAN", year=2007)
        ival_AJUN = Period(freq="A-JUN", year=2007)
        ival_ANOV = Period(freq="A-NOV", year=2007)

        ival_A_to_Q_start = Period(freq="Q", year=2007, quarter=1)
        ival_A_to_Q_end = Period(freq="Q", year=2007, quarter=4)
        ival_A_to_M_start = Period(freq="M", year=2007, month=1)
        ival_A_to_M_end = Period(freq="M", year=2007, month=12)
        ival_A_to_W_start = Period(freq="W", year=2007, month=1, day=1)
        ival_A_to_W_end = Period(freq="W", year=2007, month=12, day=31)
        ival_A_to_B_start = Period(freq="B", year=2007, month=1, day=1)
        ival_A_to_B_end = Period(freq="B", year=2007, month=12, day=31)
        ival_A_to_D_start = Period(freq="D", year=2007, month=1, day=1)
        ival_A_to_D_end = Period(freq="D", year=2007, month=12, day=31)
        ival_A_to_H_start = Period(freq="H", year=2007, month=1, day=1, hour=0)
        ival_A_to_H_end = Period(freq="H",
                                 year=2007,
                                 month=12,
                                 day=31,
                                 hour=23)
        ival_A_to_T_start = Period(freq="Min",
                                   year=2007,
                                   month=1,
                                   day=1,
                                   hour=0,
                                   minute=0)
        ival_A_to_T_end = Period(freq="Min",
                                 year=2007,
                                 month=12,
                                 day=31,
                                 hour=23,
                                 minute=59)
        ival_A_to_S_start = Period(freq="S",
                                   year=2007,
                                   month=1,
                                   day=1,
                                   hour=0,
                                   minute=0,
                                   second=0)
        ival_A_to_S_end = Period(freq="S",
                                 year=2007,
                                 month=12,
                                 day=31,
                                 hour=23,
                                 minute=59,
                                 second=59)

        ival_AJAN_to_D_end = Period(freq="D", year=2007, month=1, day=31)
        ival_AJAN_to_D_start = Period(freq="D", year=2006, month=2, day=1)
        ival_AJUN_to_D_end = Period(freq="D", year=2007, month=6, day=30)
        ival_AJUN_to_D_start = Period(freq="D", year=2006, month=7, day=1)
        ival_ANOV_to_D_end = Period(freq="D", year=2007, month=11, day=30)
        ival_ANOV_to_D_start = Period(freq="D", year=2006, month=12, day=1)

        assert ival_A.asfreq("Q", "S") == ival_A_to_Q_start
        assert ival_A.asfreq("Q", "e") == ival_A_to_Q_end
        assert ival_A.asfreq("M", "s") == ival_A_to_M_start
        assert ival_A.asfreq("M", "E") == ival_A_to_M_end
        assert ival_A.asfreq("W", "S") == ival_A_to_W_start
        assert ival_A.asfreq("W", "E") == ival_A_to_W_end
        assert ival_A.asfreq("B", "S") == ival_A_to_B_start
        assert ival_A.asfreq("B", "E") == ival_A_to_B_end
        assert ival_A.asfreq("D", "S") == ival_A_to_D_start
        assert ival_A.asfreq("D", "E") == ival_A_to_D_end
        assert ival_A.asfreq("H", "S") == ival_A_to_H_start
        assert ival_A.asfreq("H", "E") == ival_A_to_H_end
        assert ival_A.asfreq("min", "S") == ival_A_to_T_start
        assert ival_A.asfreq("min", "E") == ival_A_to_T_end
        assert ival_A.asfreq("T", "S") == ival_A_to_T_start
        assert ival_A.asfreq("T", "E") == ival_A_to_T_end
        assert ival_A.asfreq("S", "S") == ival_A_to_S_start
        assert ival_A.asfreq("S", "E") == ival_A_to_S_end

        assert ival_AJAN.asfreq("D", "S") == ival_AJAN_to_D_start
        assert ival_AJAN.asfreq("D", "E") == ival_AJAN_to_D_end

        assert ival_AJUN.asfreq("D", "S") == ival_AJUN_to_D_start
        assert ival_AJUN.asfreq("D", "E") == ival_AJUN_to_D_end

        assert ival_ANOV.asfreq("D", "S") == ival_ANOV_to_D_start
        assert ival_ANOV.asfreq("D", "E") == ival_ANOV_to_D_end

        assert ival_A.asfreq("A") == ival_A
Ejemplo n.º 39
0
    def test_constructor(self):
        pi = period_range(freq='A', start='1/1/2001', end='12/1/2009')
        assert len(pi) == 9

        pi = period_range(freq='Q', start='1/1/2001', end='12/1/2009')
        assert len(pi) == 4 * 9

        pi = period_range(freq='M', start='1/1/2001', end='12/1/2009')
        assert len(pi) == 12 * 9

        pi = period_range(freq='D', start='1/1/2001', end='12/31/2009')
        assert len(pi) == 365 * 9 + 2

        pi = period_range(freq='B', start='1/1/2001', end='12/31/2009')
        assert len(pi) == 261 * 9

        pi = period_range(freq='H', start='1/1/2001', end='12/31/2001 23:00')
        assert len(pi) == 365 * 24

        pi = period_range(freq='Min', start='1/1/2001', end='1/1/2001 23:59')
        assert len(pi) == 24 * 60

        pi = period_range(freq='S', start='1/1/2001', end='1/1/2001 23:59:59')
        assert len(pi) == 24 * 60 * 60

        start = Period('02-Apr-2005', 'B')
        i1 = period_range(start=start, periods=20)
        assert len(i1) == 20
        assert i1.freq == start.freq
        assert i1[0] == start

        end_intv = Period('2006-12-31', 'W')
        i1 = period_range(end=end_intv, periods=10)
        assert len(i1) == 10
        assert i1.freq == end_intv.freq
        assert i1[-1] == end_intv

        end_intv = Period('2006-12-31', '1w')
        i2 = period_range(end=end_intv, periods=10)
        assert len(i1) == len(i2)
        assert (i1 == i2).all()
        assert i1.freq == i2.freq

        end_intv = Period('2006-12-31', ('w', 1))
        i2 = period_range(end=end_intv, periods=10)
        assert len(i1) == len(i2)
        assert (i1 == i2).all()
        assert i1.freq == i2.freq

        end_intv = Period('2005-05-01', 'B')
        i1 = period_range(start=start, end=end_intv)

        # infer freq from first element
        i2 = PeriodIndex([end_intv, Period('2005-05-05', 'B')])
        assert len(i2) == 2
        assert i2[0] == end_intv

        i2 = PeriodIndex(np.array([end_intv, Period('2005-05-05', 'B')]))
        assert len(i2) == 2
        assert i2[0] == end_intv

        # Mixed freq should fail
        vals = [end_intv, Period('2006-12-31', 'w')]
        pytest.raises(ValueError, PeriodIndex, vals)
        vals = np.array(vals)
        pytest.raises(ValueError, PeriodIndex, vals)
Ejemplo n.º 40
0
    def test_conv_daily(self):
        # frequency conversion tests: from Business Frequency"

        ival_D = Period(freq="D", year=2007, month=1, day=1)
        ival_D_end_of_year = Period(freq="D", year=2007, month=12, day=31)
        ival_D_end_of_quarter = Period(freq="D", year=2007, month=3, day=31)
        ival_D_end_of_month = Period(freq="D", year=2007, month=1, day=31)
        ival_D_end_of_week = Period(freq="D", year=2007, month=1, day=7)

        ival_D_friday = Period(freq="D", year=2007, month=1, day=5)
        ival_D_saturday = Period(freq="D", year=2007, month=1, day=6)
        ival_D_sunday = Period(freq="D", year=2007, month=1, day=7)

        # TODO: unused?
        # ival_D_monday = Period(freq='D', year=2007, month=1, day=8)

        ival_B_friday = Period(freq="B", year=2007, month=1, day=5)
        ival_B_monday = Period(freq="B", year=2007, month=1, day=8)

        ival_D_to_A = Period(freq="A", year=2007)

        ival_Deoq_to_AJAN = Period(freq="A-JAN", year=2008)
        ival_Deoq_to_AJUN = Period(freq="A-JUN", year=2007)
        ival_Deoq_to_ADEC = Period(freq="A-DEC", year=2007)

        ival_D_to_QEJAN = Period(freq="Q-JAN", year=2007, quarter=4)
        ival_D_to_QEJUN = Period(freq="Q-JUN", year=2007, quarter=3)
        ival_D_to_QEDEC = Period(freq="Q-DEC", year=2007, quarter=1)

        ival_D_to_M = Period(freq="M", year=2007, month=1)
        ival_D_to_W = Period(freq="W", year=2007, month=1, day=7)

        ival_D_to_H_start = Period(freq="H", year=2007, month=1, day=1, hour=0)
        ival_D_to_H_end = Period(freq="H", year=2007, month=1, day=1, hour=23)
        ival_D_to_T_start = Period(freq="Min",
                                   year=2007,
                                   month=1,
                                   day=1,
                                   hour=0,
                                   minute=0)
        ival_D_to_T_end = Period(freq="Min",
                                 year=2007,
                                 month=1,
                                 day=1,
                                 hour=23,
                                 minute=59)
        ival_D_to_S_start = Period(freq="S",
                                   year=2007,
                                   month=1,
                                   day=1,
                                   hour=0,
                                   minute=0,
                                   second=0)
        ival_D_to_S_end = Period(freq="S",
                                 year=2007,
                                 month=1,
                                 day=1,
                                 hour=23,
                                 minute=59,
                                 second=59)

        assert ival_D.asfreq("A") == ival_D_to_A

        assert ival_D_end_of_quarter.asfreq("A-JAN") == ival_Deoq_to_AJAN
        assert ival_D_end_of_quarter.asfreq("A-JUN") == ival_Deoq_to_AJUN
        assert ival_D_end_of_quarter.asfreq("A-DEC") == ival_Deoq_to_ADEC

        assert ival_D_end_of_year.asfreq("A") == ival_D_to_A
        assert ival_D_end_of_quarter.asfreq("Q") == ival_D_to_QEDEC
        assert ival_D.asfreq("Q-JAN") == ival_D_to_QEJAN
        assert ival_D.asfreq("Q-JUN") == ival_D_to_QEJUN
        assert ival_D.asfreq("Q-DEC") == ival_D_to_QEDEC
        assert ival_D.asfreq("M") == ival_D_to_M
        assert ival_D_end_of_month.asfreq("M") == ival_D_to_M
        assert ival_D.asfreq("W") == ival_D_to_W
        assert ival_D_end_of_week.asfreq("W") == ival_D_to_W

        assert ival_D_friday.asfreq("B") == ival_B_friday
        assert ival_D_saturday.asfreq("B", "S") == ival_B_friday
        assert ival_D_saturday.asfreq("B", "E") == ival_B_monday
        assert ival_D_sunday.asfreq("B", "S") == ival_B_friday
        assert ival_D_sunday.asfreq("B", "E") == ival_B_monday

        assert ival_D.asfreq("H", "S") == ival_D_to_H_start
        assert ival_D.asfreq("H", "E") == ival_D_to_H_end
        assert ival_D.asfreq("Min", "S") == ival_D_to_T_start
        assert ival_D.asfreq("Min", "E") == ival_D_to_T_end
        assert ival_D.asfreq("S", "S") == ival_D_to_S_start
        assert ival_D.asfreq("S", "E") == ival_D_to_S_end

        assert ival_D.asfreq("D") == ival_D
Ejemplo n.º 41
0
def create_data():
    """ create the pickle/msgpack data """

    data = {
        u'A': [0., 1., 2., 3., np.nan],
        u'B': [0, 1, 0, 1, 0],
        u'C': [u'foo1', u'foo2', u'foo3', u'foo4', u'foo5'],
        u'D': date_range('1/1/2009', periods=5),
        u'E': [0., 1, Timestamp('20100101'), u'foo', 2.]
    }

    scalars = dict(timestamp=Timestamp('20130101'), period=Period('2012', 'M'))

    index = dict(int=Index(np.arange(10)),
                 date=date_range('20130101', periods=10),
                 period=period_range('2013-01-01', freq='M', periods=10),
                 float=Index(np.arange(10, dtype=np.float64)),
                 uint=Index(np.arange(10, dtype=np.uint64)),
                 timedelta=timedelta_range('00:00:00', freq='30T', periods=10))

    if _loose_version >= LooseVersion('0.18'):
        from pandas import RangeIndex
        index['range'] = RangeIndex(10)

    if _loose_version >= LooseVersion('0.21'):
        from pandas import interval_range
        index['interval'] = interval_range(0, periods=10)

    mi = dict(reg2=MultiIndex.from_tuples(tuple(
        zip(*[[u'bar', u'bar', u'baz', u'baz', u'foo', u'foo', u'qux', u'qux'],
              [u'one', u'two', u'one', u'two', u'one', u'two', u'one', u'two']
              ])),
                                          names=[u'first', u'second']))

    series = dict(
        float=Series(data[u'A']),
        int=Series(data[u'B']),
        mixed=Series(data[u'E']),
        ts=Series(np.arange(10).astype(np.int64),
                  index=date_range('20130101', periods=10)),
        mi=Series(np.arange(5).astype(np.float64),
                  index=MultiIndex.from_tuples(tuple(
                      zip(*[[1, 1, 2, 2, 2], [3, 4, 3, 4, 5]])),
                                               names=[u'one', u'two'])),
        dup=Series(np.arange(5).astype(np.float64),
                   index=[u'A', u'B', u'C', u'D', u'A']),
        cat=Series(Categorical([u'foo', u'bar', u'baz'])),
        dt=Series(date_range('20130101', periods=5)),
        dt_tz=Series(date_range('20130101', periods=5, tz='US/Eastern')),
        period=Series([Period('2000Q1')] * 5))

    mixed_dup_df = DataFrame(data)
    mixed_dup_df.columns = list(u"ABCDA")
    frame = dict(
        float=DataFrame({
            u'A': series[u'float'],
            u'B': series[u'float'] + 1
        }),
        int=DataFrame({
            u'A': series[u'int'],
            u'B': series[u'int'] + 1
        }),
        mixed=DataFrame({k: data[k]
                         for k in [u'A', u'B', u'C', u'D']}),
        mi=DataFrame(
            {
                u'A': np.arange(5).astype(np.float64),
                u'B': np.arange(5).astype(np.int64)
            },
            index=MultiIndex.from_tuples(tuple(
                zip(*[[u'bar', u'bar', u'baz', u'baz', u'baz'],
                      [u'one', u'two', u'one', u'two', u'three']])),
                                         names=[u'first', u'second'])),
        dup=DataFrame(np.arange(15).reshape(5, 3).astype(np.float64),
                      columns=[u'A', u'B', u'A']),
        cat_onecol=DataFrame({u'A': Categorical([u'foo', u'bar'])}),
        cat_and_float=DataFrame({
            u'A': Categorical([u'foo', u'bar', u'baz']),
            u'B': np.arange(3).astype(np.int64)
        }),
        mixed_dup=mixed_dup_df,
        dt_mixed_tzs=DataFrame(
            {
                u'A': Timestamp('20130102', tz='US/Eastern'),
                u'B': Timestamp('20130603', tz='CET')
            },
            index=range(5)),
        dt_mixed2_tzs=DataFrame(
            {
                u'A': Timestamp('20130102', tz='US/Eastern'),
                u'B': Timestamp('20130603', tz='CET'),
                u'C': Timestamp('20130603', tz='UTC')
            },
            index=range(5)))

    with catch_warnings(record=True):
        filterwarnings("ignore", "\\nPanel", FutureWarning)
        mixed_dup_panel = Panel({
            u'ItemA': frame[u'float'],
            u'ItemB': frame[u'int']
        })
        mixed_dup_panel.items = [u'ItemA', u'ItemA']
        panel = dict(float=Panel({
            u'ItemA': frame[u'float'],
            u'ItemB': frame[u'float'] + 1
        }),
                     dup=Panel(np.arange(30).reshape(3, 5,
                                                     2).astype(np.float64),
                               items=[u'A', u'B', u'A']),
                     mixed_dup=mixed_dup_panel)

    cat = dict(int8=Categorical(list('abcdefg')),
               int16=Categorical(np.arange(1000)),
               int32=Categorical(np.arange(10000)))

    timestamp = dict(normal=Timestamp('2011-01-01'),
                     nat=NaT,
                     tz=Timestamp('2011-01-01', tz='US/Eastern'))

    if _loose_version < LooseVersion('0.19.2'):
        timestamp['freq'] = Timestamp('2011-01-01', offset='D')
        timestamp['both'] = Timestamp('2011-01-01',
                                      tz='Asia/Tokyo',
                                      offset='M')
    else:
        timestamp['freq'] = Timestamp('2011-01-01', freq='D')
        timestamp['both'] = Timestamp('2011-01-01', tz='Asia/Tokyo', freq='M')

    off = {
        'DateOffset': DateOffset(years=1),
        'DateOffset_h_ns': DateOffset(hour=6, nanoseconds=5824),
        'BusinessDay': BusinessDay(offset=timedelta(seconds=9)),
        'BusinessHour': BusinessHour(normalize=True, n=6, end='15:14'),
        'CustomBusinessDay': CustomBusinessDay(weekmask='Mon Fri'),
        'SemiMonthBegin': SemiMonthBegin(day_of_month=9),
        'SemiMonthEnd': SemiMonthEnd(day_of_month=24),
        'MonthBegin': MonthBegin(1),
        'MonthEnd': MonthEnd(1),
        'QuarterBegin': QuarterBegin(1),
        'QuarterEnd': QuarterEnd(1),
        'Day': Day(1),
        'YearBegin': YearBegin(1),
        'YearEnd': YearEnd(1),
        'Week': Week(1),
        'Week_Tues': Week(2, normalize=False, weekday=1),
        'WeekOfMonth': WeekOfMonth(week=3, weekday=4),
        'LastWeekOfMonth': LastWeekOfMonth(n=1, weekday=3),
        'FY5253': FY5253(n=2, weekday=6, startingMonth=7, variation="last"),
        'Easter': Easter(),
        'Hour': Hour(1),
        'Minute': Minute(1)
    }

    return dict(series=series,
                frame=frame,
                panel=panel,
                index=index,
                scalars=scalars,
                mi=mi,
                sp_series=dict(float=_create_sp_series(),
                               ts=_create_sp_tsseries()),
                sp_frame=dict(float=_create_sp_frame()),
                cat=cat,
                timestamp=timestamp,
                offsets=off)
Ejemplo n.º 42
0
    with pytest.raises(TypeError, match=msg):
        s.reindex(newidx, method="ffill")


def test_reindex_empty_series_tz_dtype():
    # GH 20869
    result = Series(dtype="datetime64[ns, UTC]").reindex([0, 1])
    expected = Series([NaT] * 2, dtype="datetime64[ns, UTC]")
    tm.assert_equal(result, expected)


@pytest.mark.parametrize(
    "p_values, o_values, values, expected_values",
    [
        (
            [Period("2019Q1", "Q-DEC"),
             Period("2019Q2", "Q-DEC")],
            [Period("2019Q1", "Q-DEC"),
             Period("2019Q2", "Q-DEC"), "All"],
            [1.0, 1.0],
            [1.0, 1.0, np.nan],
        ),
        (
            [Period("2019Q1", "Q-DEC"),
             Period("2019Q2", "Q-DEC")],
            [Period("2019Q1", "Q-DEC"),
             Period("2019Q2", "Q-DEC")],
            [1.0, 1.0],
            [1.0, 1.0],
        ),
    ],
Ejemplo n.º 43
0
 def test_strftime(self):
     p = Period('2000-1-1 12:34:12', freq='S')
     res = p.strftime('%Y-%m-%d %H:%M:%S')
     assert res == '2000-01-01 12:34:12'
     assert isinstance(res, text_type)  # GH3363
Ejemplo n.º 44
0
 def test_is_scalar_pandas_scalars(self):
     assert is_scalar(Timestamp('2014-01-01'))
     assert is_scalar(Timedelta(hours=1))
     assert is_scalar(Period('2014-01-01'))
     assert is_scalar(Interval(left=0, right=1))
     assert is_scalar(DateOffset(days=1))
Ejemplo n.º 45
0
 def test_periods(self):
     # 13463
     for i in [Period("2010-09", "M"), Period("2014-Q1", "Q")]:
         i_rec = self.encode_decode(i)
         assert i == i_rec
Ejemplo n.º 46
0
 def setup(self):
     self.per = Period('2017-09-06 08:28', freq='min')
Ejemplo n.º 47
0
    def test_conv_monthly(self):
        # frequency conversion tests: from Monthly Frequency

        ival_M = Period(freq='M', year=2007, month=1)
        ival_M_end_of_year = Period(freq='M', year=2007, month=12)
        ival_M_end_of_quarter = Period(freq='M', year=2007, month=3)
        ival_M_to_A = Period(freq='A', year=2007)
        ival_M_to_Q = Period(freq='Q', year=2007, quarter=1)
        ival_M_to_W_start = Period(freq='W', year=2007, month=1, day=1)
        ival_M_to_W_end = Period(freq='W', year=2007, month=1, day=31)
        ival_M_to_B_start = Period(freq='B', year=2007, month=1, day=1)
        ival_M_to_B_end = Period(freq='B', year=2007, month=1, day=31)
        ival_M_to_D_start = Period(freq='D', year=2007, month=1, day=1)
        ival_M_to_D_end = Period(freq='D', year=2007, month=1, day=31)
        ival_M_to_H_start = Period(freq='H', year=2007, month=1, day=1, hour=0)
        ival_M_to_H_end = Period(freq='H', year=2007, month=1, day=31, hour=23)
        ival_M_to_T_start = Period(freq='Min', year=2007, month=1, day=1,
                                   hour=0, minute=0)
        ival_M_to_T_end = Period(freq='Min', year=2007, month=1, day=31,
                                 hour=23, minute=59)
        ival_M_to_S_start = Period(freq='S', year=2007, month=1, day=1, hour=0,
                                   minute=0, second=0)
        ival_M_to_S_end = Period(freq='S', year=2007, month=1, day=31, hour=23,
                                 minute=59, second=59)

        assert ival_M.asfreq('A') == ival_M_to_A
        assert ival_M_end_of_year.asfreq('A') == ival_M_to_A
        assert ival_M.asfreq('Q') == ival_M_to_Q
        assert ival_M_end_of_quarter.asfreq('Q') == ival_M_to_Q

        assert ival_M.asfreq('W', 'S') == ival_M_to_W_start
        assert ival_M.asfreq('W', 'E') == ival_M_to_W_end
        assert ival_M.asfreq('B', 'S') == ival_M_to_B_start
        assert ival_M.asfreq('B', 'E') == ival_M_to_B_end
        assert ival_M.asfreq('D', 'S') == ival_M_to_D_start
        assert ival_M.asfreq('D', 'E') == ival_M_to_D_end
        assert ival_M.asfreq('H', 'S') == ival_M_to_H_start
        assert ival_M.asfreq('H', 'E') == ival_M_to_H_end
        assert ival_M.asfreq('Min', 'S') == ival_M_to_T_start
        assert ival_M.asfreq('Min', 'E') == ival_M_to_T_end
        assert ival_M.asfreq('S', 'S') == ival_M_to_S_start
        assert ival_M.asfreq('S', 'E') == ival_M_to_S_end

        assert ival_M.asfreq('M') == ival_M
Ejemplo n.º 48
0
        datetime(2000, 1, 4),
        datetime(2000, 1, 4),
        datetime(2000, 1, 4),
        datetime(2000, 1, 5),
    ]

    return Series(np.random.randn(len(dates)), index=dates)


# ----------------------------------------------------------------
# Scalars
# ----------------------------------------------------------------
@pytest.fixture(params=[
    (Interval(left=0, right=5), IntervalDtype("int64", "right")),
    (Interval(left=0.1, right=0.5), IntervalDtype("float64", "right")),
    (Period("2012-01", freq="M"), "period[M]"),
    (Period("2012-02-01", freq="D"), "period[D]"),
    (
        Timestamp("2011-01-01", tz="US/Eastern"),
        DatetimeTZDtype(tz="US/Eastern"),
    ),
    (Timedelta(seconds=500), "timedelta64[ns]"),
])
def ea_scalar_and_dtype(request):
    return request.param


# ----------------------------------------------------------------
# Operators & Operations
# ----------------------------------------------------------------
_all_arithmetic_operators = [
Ejemplo n.º 49
0
    def test_conv_weekly(self):
        # frequency conversion tests: from Weekly Frequency
        ival_W = Period(freq='W', year=2007, month=1, day=1)

        ival_WSUN = Period(freq='W', year=2007, month=1, day=7)
        ival_WSAT = Period(freq='W-SAT', year=2007, month=1, day=6)
        ival_WFRI = Period(freq='W-FRI', year=2007, month=1, day=5)
        ival_WTHU = Period(freq='W-THU', year=2007, month=1, day=4)
        ival_WWED = Period(freq='W-WED', year=2007, month=1, day=3)
        ival_WTUE = Period(freq='W-TUE', year=2007, month=1, day=2)
        ival_WMON = Period(freq='W-MON', year=2007, month=1, day=1)

        ival_WSUN_to_D_start = Period(freq='D', year=2007, month=1, day=1)
        ival_WSUN_to_D_end = Period(freq='D', year=2007, month=1, day=7)
        ival_WSAT_to_D_start = Period(freq='D', year=2006, month=12, day=31)
        ival_WSAT_to_D_end = Period(freq='D', year=2007, month=1, day=6)
        ival_WFRI_to_D_start = Period(freq='D', year=2006, month=12, day=30)
        ival_WFRI_to_D_end = Period(freq='D', year=2007, month=1, day=5)
        ival_WTHU_to_D_start = Period(freq='D', year=2006, month=12, day=29)
        ival_WTHU_to_D_end = Period(freq='D', year=2007, month=1, day=4)
        ival_WWED_to_D_start = Period(freq='D', year=2006, month=12, day=28)
        ival_WWED_to_D_end = Period(freq='D', year=2007, month=1, day=3)
        ival_WTUE_to_D_start = Period(freq='D', year=2006, month=12, day=27)
        ival_WTUE_to_D_end = Period(freq='D', year=2007, month=1, day=2)
        ival_WMON_to_D_start = Period(freq='D', year=2006, month=12, day=26)
        ival_WMON_to_D_end = Period(freq='D', year=2007, month=1, day=1)

        ival_W_end_of_year = Period(freq='W', year=2007, month=12, day=31)
        ival_W_end_of_quarter = Period(freq='W', year=2007, month=3, day=31)
        ival_W_end_of_month = Period(freq='W', year=2007, month=1, day=31)
        ival_W_to_A = Period(freq='A', year=2007)
        ival_W_to_Q = Period(freq='Q', year=2007, quarter=1)
        ival_W_to_M = Period(freq='M', year=2007, month=1)

        if Period(freq='D', year=2007, month=12, day=31).weekday == 6:
            ival_W_to_A_end_of_year = Period(freq='A', year=2007)
        else:
            ival_W_to_A_end_of_year = Period(freq='A', year=2008)

        if Period(freq='D', year=2007, month=3, day=31).weekday == 6:
            ival_W_to_Q_end_of_quarter = Period(freq='Q', year=2007, quarter=1)
        else:
            ival_W_to_Q_end_of_quarter = Period(freq='Q', year=2007, quarter=2)

        if Period(freq='D', year=2007, month=1, day=31).weekday == 6:
            ival_W_to_M_end_of_month = Period(freq='M', year=2007, month=1)
        else:
            ival_W_to_M_end_of_month = Period(freq='M', year=2007, month=2)

        ival_W_to_B_start = Period(freq='B', year=2007, month=1, day=1)
        ival_W_to_B_end = Period(freq='B', year=2007, month=1, day=5)
        ival_W_to_D_start = Period(freq='D', year=2007, month=1, day=1)
        ival_W_to_D_end = Period(freq='D', year=2007, month=1, day=7)
        ival_W_to_H_start = Period(freq='H', year=2007, month=1, day=1, hour=0)
        ival_W_to_H_end = Period(freq='H', year=2007, month=1, day=7, hour=23)
        ival_W_to_T_start = Period(freq='Min', year=2007, month=1, day=1,
                                   hour=0, minute=0)
        ival_W_to_T_end = Period(freq='Min', year=2007, month=1, day=7,
                                 hour=23, minute=59)
        ival_W_to_S_start = Period(freq='S', year=2007, month=1, day=1, hour=0,
                                   minute=0, second=0)
        ival_W_to_S_end = Period(freq='S', year=2007, month=1, day=7, hour=23,
                                 minute=59, second=59)

        assert ival_W.asfreq('A') == ival_W_to_A
        assert ival_W_end_of_year.asfreq('A') == ival_W_to_A_end_of_year

        assert ival_W.asfreq('Q') == ival_W_to_Q
        assert ival_W_end_of_quarter.asfreq('Q') == ival_W_to_Q_end_of_quarter

        assert ival_W.asfreq('M') == ival_W_to_M
        assert ival_W_end_of_month.asfreq('M') == ival_W_to_M_end_of_month

        assert ival_W.asfreq('B', 'S') == ival_W_to_B_start
        assert ival_W.asfreq('B', 'E') == ival_W_to_B_end

        assert ival_W.asfreq('D', 'S') == ival_W_to_D_start
        assert ival_W.asfreq('D', 'E') == ival_W_to_D_end

        assert ival_WSUN.asfreq('D', 'S') == ival_WSUN_to_D_start
        assert ival_WSUN.asfreq('D', 'E') == ival_WSUN_to_D_end
        assert ival_WSAT.asfreq('D', 'S') == ival_WSAT_to_D_start
        assert ival_WSAT.asfreq('D', 'E') == ival_WSAT_to_D_end
        assert ival_WFRI.asfreq('D', 'S') == ival_WFRI_to_D_start
        assert ival_WFRI.asfreq('D', 'E') == ival_WFRI_to_D_end
        assert ival_WTHU.asfreq('D', 'S') == ival_WTHU_to_D_start
        assert ival_WTHU.asfreq('D', 'E') == ival_WTHU_to_D_end
        assert ival_WWED.asfreq('D', 'S') == ival_WWED_to_D_start
        assert ival_WWED.asfreq('D', 'E') == ival_WWED_to_D_end
        assert ival_WTUE.asfreq('D', 'S') == ival_WTUE_to_D_start
        assert ival_WTUE.asfreq('D', 'E') == ival_WTUE_to_D_end
        assert ival_WMON.asfreq('D', 'S') == ival_WMON_to_D_start
        assert ival_WMON.asfreq('D', 'E') == ival_WMON_to_D_end

        assert ival_W.asfreq('H', 'S') == ival_W_to_H_start
        assert ival_W.asfreq('H', 'E') == ival_W_to_H_end
        assert ival_W.asfreq('Min', 'S') == ival_W_to_T_start
        assert ival_W.asfreq('Min', 'E') == ival_W_to_T_end
        assert ival_W.asfreq('S', 'S') == ival_W_to_S_start
        assert ival_W.asfreq('S', 'E') == ival_W_to_S_end

        assert ival_W.asfreq('W') == ival_W

        msg = INVALID_FREQ_ERR_MSG
        with pytest.raises(ValueError, match=msg):
            ival_W.asfreq('WK')
Ejemplo n.º 50
0
class TestComparison:
    @pytest.fixture(params=[operator.eq, operator.ne])
    def op(self, request):
        return request.param

    @pytest.fixture(
        params=[
            IntervalArray.from_arrays,
            IntervalIndex.from_arrays,
            create_categorical_intervals,
            create_series_intervals,
            create_series_categorical_intervals,
        ],
        ids=[
            "IntervalArray",
            "IntervalIndex",
            "Categorical[Interval]",
            "Series[Interval]",
            "Series[Categorical[Interval]]",
        ],
    )
    def interval_constructor(self, request):
        """
        Fixture for all pandas native interval constructors.
        To be used as the LHS of IntervalArray comparisons.
        """
        return request.param

    def elementwise_comparison(self, op, array, other):
        """
        Helper that performs elementwise comparisons between `array` and `other`
        """
        other = other if is_list_like(other) else [other] * len(array)
        expected = np.array([op(x, y) for x, y in zip(array, other)])
        if isinstance(other, Series):
            return Series(expected, index=other.index)
        return expected

    def test_compare_scalar_interval(self, op, array):
        # matches first interval
        other = array[0]
        result = op(array, other)
        expected = self.elementwise_comparison(op, array, other)
        tm.assert_numpy_array_equal(result, expected)

        # matches on a single endpoint but not both
        other = Interval(array.left[0], array.right[1])
        result = op(array, other)
        expected = self.elementwise_comparison(op, array, other)
        tm.assert_numpy_array_equal(result, expected)

    def test_compare_scalar_interval_mixed_closed(self, op, closed,
                                                  other_closed):
        array = IntervalArray.from_arrays(range(2), range(1, 3), closed=closed)
        other = Interval(0, 1, closed=other_closed)

        result = op(array, other)
        expected = self.elementwise_comparison(op, array, other)
        tm.assert_numpy_array_equal(result, expected)

    def test_compare_scalar_na(self, op, array, nulls_fixture, request):
        result = op(array, nulls_fixture)
        expected = self.elementwise_comparison(op, array, nulls_fixture)

        if nulls_fixture is pd.NA and array.dtype != pd.IntervalDtype("int64"):
            mark = pytest.mark.xfail(
                reason="broken for non-integer IntervalArray; see GH 31882")
            request.node.add_marker(mark)

        tm.assert_numpy_array_equal(result, expected)

    @pytest.mark.parametrize(
        "other",
        [
            0,
            1.0,
            True,
            "foo",
            Timestamp("2017-01-01"),
            Timestamp("2017-01-01", tz="US/Eastern"),
            Timedelta("0 days"),
            Period("2017-01-01", "D"),
        ],
    )
    def test_compare_scalar_other(self, op, array, other):
        result = op(array, other)
        expected = self.elementwise_comparison(op, array, other)
        tm.assert_numpy_array_equal(result, expected)

    def test_compare_list_like_interval(self, op, array, interval_constructor):
        # same endpoints
        other = interval_constructor(array.left, array.right)
        result = op(array, other)
        expected = self.elementwise_comparison(op, array, other)
        tm.assert_equal(result, expected)

        # different endpoints
        other = interval_constructor(array.left[::-1], array.right[::-1])
        result = op(array, other)
        expected = self.elementwise_comparison(op, array, other)
        tm.assert_equal(result, expected)

        # all nan endpoints
        other = interval_constructor([np.nan] * 4, [np.nan] * 4)
        result = op(array, other)
        expected = self.elementwise_comparison(op, array, other)
        tm.assert_equal(result, expected)

    def test_compare_list_like_interval_mixed_closed(self, op,
                                                     interval_constructor,
                                                     closed, other_closed):
        array = IntervalArray.from_arrays(range(2), range(1, 3), closed=closed)
        other = interval_constructor(range(2),
                                     range(1, 3),
                                     closed=other_closed)

        result = op(array, other)
        expected = self.elementwise_comparison(op, array, other)
        tm.assert_equal(result, expected)

    @pytest.mark.parametrize(
        "other",
        [
            (
                Interval(0, 1),
                Interval(Timedelta("1 day"), Timedelta("2 days")),
                Interval(4, 5, "both"),
                Interval(10, 20, "neither"),
            ),
            (0, 1.5, Timestamp("20170103"), np.nan),
            (
                Timestamp("20170102", tz="US/Eastern"),
                Timedelta("2 days"),
                "baz",
                pd.NaT,
            ),
        ],
    )
    def test_compare_list_like_object(self, op, array, other):
        result = op(array, other)
        expected = self.elementwise_comparison(op, array, other)
        tm.assert_numpy_array_equal(result, expected)

    def test_compare_list_like_nan(self, op, array, nulls_fixture, request):
        other = [nulls_fixture] * 4
        result = op(array, other)
        expected = self.elementwise_comparison(op, array, other)

        if nulls_fixture is pd.NA and array.dtype.subtype != "i8":
            reason = "broken for non-integer IntervalArray; see GH 31882"
            mark = pytest.mark.xfail(reason=reason)
            request.node.add_marker(mark)

        tm.assert_numpy_array_equal(result, expected)

    @pytest.mark.parametrize(
        "other",
        [
            np.arange(4, dtype="int64"),
            np.arange(4, dtype="float64"),
            date_range("2017-01-01", periods=4),
            date_range("2017-01-01", periods=4, tz="US/Eastern"),
            timedelta_range("0 days", periods=4),
            period_range("2017-01-01", periods=4, freq="D"),
            Categorical(list("abab")),
            Categorical(date_range("2017-01-01", periods=4)),
            pd.array(list("abcd")),
            pd.array(["foo", 3.14, None, object()]),
        ],
        ids=lambda x: str(x.dtype),
    )
    def test_compare_list_like_other(self, op, array, other):
        result = op(array, other)
        expected = self.elementwise_comparison(op, array, other)
        tm.assert_numpy_array_equal(result, expected)

    @pytest.mark.parametrize("length", [1, 3, 5])
    @pytest.mark.parametrize("other_constructor", [IntervalArray, list])
    def test_compare_length_mismatch_errors(self, op, other_constructor,
                                            length):
        array = IntervalArray.from_arrays(range(4), range(1, 5))
        other = other_constructor([Interval(0, 1)] * length)
        with pytest.raises(ValueError, match="Lengths must match to compare"):
            op(array, other)

    @pytest.mark.parametrize(
        "constructor, expected_type, assert_func",
        [
            (IntervalIndex, np.array, tm.assert_numpy_array_equal),
            (Series, Series, tm.assert_series_equal),
        ],
    )
    def test_index_series_compat(self, op, constructor, expected_type,
                                 assert_func):
        # IntervalIndex/Series that rely on IntervalArray for comparisons
        breaks = range(4)
        index = constructor(IntervalIndex.from_breaks(breaks))

        # scalar comparisons
        other = index[0]
        result = op(index, other)
        expected = expected_type(self.elementwise_comparison(op, index, other))
        assert_func(result, expected)

        other = breaks[0]
        result = op(index, other)
        expected = expected_type(self.elementwise_comparison(op, index, other))
        assert_func(result, expected)

        # list-like comparisons
        other = IntervalArray.from_breaks(breaks)
        result = op(index, other)
        expected = expected_type(self.elementwise_comparison(op, index, other))
        assert_func(result, expected)

        other = [index[0], breaks[0], "foo"]
        result = op(index, other)
        expected = expected_type(self.elementwise_comparison(op, index, other))
        assert_func(result, expected)

    @pytest.mark.parametrize("scalars", ["a", False, 1, 1.0, None])
    def test_comparison_operations(self, scalars):
        # GH #28981
        expected = Series([False, False])
        s = pd.Series([pd.Interval(0, 1), pd.Interval(1, 2)], dtype="interval")
        result = s == scalars
        tm.assert_series_equal(result, expected)
Ejemplo n.º 51
0
    def test_conv_business(self):
        # frequency conversion tests: from Business Frequency"

        ival_B = Period(freq='B', year=2007, month=1, day=1)
        ival_B_end_of_year = Period(freq='B', year=2007, month=12, day=31)
        ival_B_end_of_quarter = Period(freq='B', year=2007, month=3, day=30)
        ival_B_end_of_month = Period(freq='B', year=2007, month=1, day=31)
        ival_B_end_of_week = Period(freq='B', year=2007, month=1, day=5)

        ival_B_to_A = Period(freq='A', year=2007)
        ival_B_to_Q = Period(freq='Q', year=2007, quarter=1)
        ival_B_to_M = Period(freq='M', year=2007, month=1)
        ival_B_to_W = Period(freq='W', year=2007, month=1, day=7)
        ival_B_to_D = Period(freq='D', year=2007, month=1, day=1)
        ival_B_to_H_start = Period(freq='H', year=2007, month=1, day=1, hour=0)
        ival_B_to_H_end = Period(freq='H', year=2007, month=1, day=1, hour=23)
        ival_B_to_T_start = Period(freq='Min', year=2007, month=1, day=1,
                                   hour=0, minute=0)
        ival_B_to_T_end = Period(freq='Min', year=2007, month=1, day=1,
                                 hour=23, minute=59)
        ival_B_to_S_start = Period(freq='S', year=2007, month=1, day=1, hour=0,
                                   minute=0, second=0)
        ival_B_to_S_end = Period(freq='S', year=2007, month=1, day=1, hour=23,
                                 minute=59, second=59)

        assert ival_B.asfreq('A') == ival_B_to_A
        assert ival_B_end_of_year.asfreq('A') == ival_B_to_A
        assert ival_B.asfreq('Q') == ival_B_to_Q
        assert ival_B_end_of_quarter.asfreq('Q') == ival_B_to_Q
        assert ival_B.asfreq('M') == ival_B_to_M
        assert ival_B_end_of_month.asfreq('M') == ival_B_to_M
        assert ival_B.asfreq('W') == ival_B_to_W
        assert ival_B_end_of_week.asfreq('W') == ival_B_to_W

        assert ival_B.asfreq('D') == ival_B_to_D

        assert ival_B.asfreq('H', 'S') == ival_B_to_H_start
        assert ival_B.asfreq('H', 'E') == ival_B_to_H_end
        assert ival_B.asfreq('Min', 'S') == ival_B_to_T_start
        assert ival_B.asfreq('Min', 'E') == ival_B_to_T_end
        assert ival_B.asfreq('S', 'S') == ival_B_to_S_start
        assert ival_B.asfreq('S', 'E') == ival_B_to_S_end

        assert ival_B.asfreq('B') == ival_B
Ejemplo n.º 52
0
    def test_conv_weekly(self):
        # frequency conversion tests: from Weekly Frequency
        ival_W = Period(freq='W', year=2007, month=1, day=1)

        ival_WSUN = Period(freq='W', year=2007, month=1, day=7)
        ival_WSAT = Period(freq='W-SAT', year=2007, month=1, day=6)
        ival_WFRI = Period(freq='W-FRI', year=2007, month=1, day=5)
        ival_WTHU = Period(freq='W-THU', year=2007, month=1, day=4)
        ival_WWED = Period(freq='W-WED', year=2007, month=1, day=3)
        ival_WTUE = Period(freq='W-TUE', year=2007, month=1, day=2)
        ival_WMON = Period(freq='W-MON', year=2007, month=1, day=1)

        ival_WSUN_to_D_start = Period(freq='D', year=2007, month=1, day=1)
        ival_WSUN_to_D_end = Period(freq='D', year=2007, month=1, day=7)
        ival_WSAT_to_D_start = Period(freq='D', year=2006, month=12, day=31)
        ival_WSAT_to_D_end = Period(freq='D', year=2007, month=1, day=6)
        ival_WFRI_to_D_start = Period(freq='D', year=2006, month=12, day=30)
        ival_WFRI_to_D_end = Period(freq='D', year=2007, month=1, day=5)
        ival_WTHU_to_D_start = Period(freq='D', year=2006, month=12, day=29)
        ival_WTHU_to_D_end = Period(freq='D', year=2007, month=1, day=4)
        ival_WWED_to_D_start = Period(freq='D', year=2006, month=12, day=28)
        ival_WWED_to_D_end = Period(freq='D', year=2007, month=1, day=3)
        ival_WTUE_to_D_start = Period(freq='D', year=2006, month=12, day=27)
        ival_WTUE_to_D_end = Period(freq='D', year=2007, month=1, day=2)
        ival_WMON_to_D_start = Period(freq='D', year=2006, month=12, day=26)
        ival_WMON_to_D_end = Period(freq='D', year=2007, month=1, day=1)

        ival_W_end_of_year = Period(freq='W', year=2007, month=12, day=31)
        ival_W_end_of_quarter = Period(freq='W', year=2007, month=3, day=31)
        ival_W_end_of_month = Period(freq='W', year=2007, month=1, day=31)
        ival_W_to_A = Period(freq='A', year=2007)
        ival_W_to_Q = Period(freq='Q', year=2007, quarter=1)
        ival_W_to_M = Period(freq='M', year=2007, month=1)

        if Period(freq='D', year=2007, month=12, day=31).weekday == 6:
            ival_W_to_A_end_of_year = Period(freq='A', year=2007)
        else:
            ival_W_to_A_end_of_year = Period(freq='A', year=2008)

        if Period(freq='D', year=2007, month=3, day=31).weekday == 6:
            ival_W_to_Q_end_of_quarter = Period(freq='Q', year=2007, quarter=1)
        else:
            ival_W_to_Q_end_of_quarter = Period(freq='Q', year=2007, quarter=2)

        if Period(freq='D', year=2007, month=1, day=31).weekday == 6:
            ival_W_to_M_end_of_month = Period(freq='M', year=2007, month=1)
        else:
            ival_W_to_M_end_of_month = Period(freq='M', year=2007, month=2)

        ival_W_to_B_start = Period(freq='B', year=2007, month=1, day=1)
        ival_W_to_B_end = Period(freq='B', year=2007, month=1, day=5)
        ival_W_to_D_start = Period(freq='D', year=2007, month=1, day=1)
        ival_W_to_D_end = Period(freq='D', year=2007, month=1, day=7)
        ival_W_to_H_start = Period(freq='H', year=2007, month=1, day=1, hour=0)
        ival_W_to_H_end = Period(freq='H', year=2007, month=1, day=7, hour=23)
        ival_W_to_T_start = Period(freq='Min', year=2007, month=1, day=1,
                                   hour=0, minute=0)
        ival_W_to_T_end = Period(freq='Min', year=2007, month=1, day=7,
                                 hour=23, minute=59)
        ival_W_to_S_start = Period(freq='S', year=2007, month=1, day=1, hour=0,
                                   minute=0, second=0)
        ival_W_to_S_end = Period(freq='S', year=2007, month=1, day=7, hour=23,
                                 minute=59, second=59)

        self.assertEqual(ival_W.asfreq('A'), ival_W_to_A)
        self.assertEqual(ival_W_end_of_year.asfreq('A'),
                         ival_W_to_A_end_of_year)
        self.assertEqual(ival_W.asfreq('Q'), ival_W_to_Q)
        self.assertEqual(ival_W_end_of_quarter.asfreq('Q'),
                         ival_W_to_Q_end_of_quarter)
        self.assertEqual(ival_W.asfreq('M'), ival_W_to_M)
        self.assertEqual(ival_W_end_of_month.asfreq('M'),
                         ival_W_to_M_end_of_month)

        self.assertEqual(ival_W.asfreq('B', 'S'), ival_W_to_B_start)
        self.assertEqual(ival_W.asfreq('B', 'E'), ival_W_to_B_end)

        self.assertEqual(ival_W.asfreq('D', 'S'), ival_W_to_D_start)
        self.assertEqual(ival_W.asfreq('D', 'E'), ival_W_to_D_end)

        self.assertEqual(ival_WSUN.asfreq('D', 'S'), ival_WSUN_to_D_start)
        self.assertEqual(ival_WSUN.asfreq('D', 'E'), ival_WSUN_to_D_end)
        self.assertEqual(ival_WSAT.asfreq('D', 'S'), ival_WSAT_to_D_start)
        self.assertEqual(ival_WSAT.asfreq('D', 'E'), ival_WSAT_to_D_end)
        self.assertEqual(ival_WFRI.asfreq('D', 'S'), ival_WFRI_to_D_start)
        self.assertEqual(ival_WFRI.asfreq('D', 'E'), ival_WFRI_to_D_end)
        self.assertEqual(ival_WTHU.asfreq('D', 'S'), ival_WTHU_to_D_start)
        self.assertEqual(ival_WTHU.asfreq('D', 'E'), ival_WTHU_to_D_end)
        self.assertEqual(ival_WWED.asfreq('D', 'S'), ival_WWED_to_D_start)
        self.assertEqual(ival_WWED.asfreq('D', 'E'), ival_WWED_to_D_end)
        self.assertEqual(ival_WTUE.asfreq('D', 'S'), ival_WTUE_to_D_start)
        self.assertEqual(ival_WTUE.asfreq('D', 'E'), ival_WTUE_to_D_end)
        self.assertEqual(ival_WMON.asfreq('D', 'S'), ival_WMON_to_D_start)
        self.assertEqual(ival_WMON.asfreq('D', 'E'), ival_WMON_to_D_end)

        self.assertEqual(ival_W.asfreq('H', 'S'), ival_W_to_H_start)
        self.assertEqual(ival_W.asfreq('H', 'E'), ival_W_to_H_end)
        self.assertEqual(ival_W.asfreq('Min', 'S'), ival_W_to_T_start)
        self.assertEqual(ival_W.asfreq('Min', 'E'), ival_W_to_T_end)
        self.assertEqual(ival_W.asfreq('S', 'S'), ival_W_to_S_start)
        self.assertEqual(ival_W.asfreq('S', 'E'), ival_W_to_S_end)

        self.assertEqual(ival_W.asfreq('W'), ival_W)

        msg = pd.tseries.frequencies._INVALID_FREQ_ERROR
        with self.assertRaisesRegexp(ValueError, msg):
            ival_W.asfreq('WK')
Ejemplo n.º 53
0
 def test_getitem_list_periods(self):
     # GH 7710
     rng = period_range(start="2012-01-01", periods=10, freq="D")
     ts = Series(range(len(rng)), index=rng)
     exp = ts.iloc[[1]]
     tm.assert_series_equal(ts[[Period("2012-01-02", freq="D")]], exp)
Ejemplo n.º 54
0
    def test_conv_minutely(self):
        # frequency conversion tests: from Minutely Frequency"

        ival_T = Period(freq='Min', year=2007, month=1, day=1, hour=0,
                        minute=0)
        ival_T_end_of_year = Period(freq='Min', year=2007, month=12, day=31,
                                    hour=23, minute=59)
        ival_T_end_of_quarter = Period(freq='Min', year=2007, month=3, day=31,
                                       hour=23, minute=59)
        ival_T_end_of_month = Period(freq='Min', year=2007, month=1, day=31,
                                     hour=23, minute=59)
        ival_T_end_of_week = Period(freq='Min', year=2007, month=1, day=7,
                                    hour=23, minute=59)
        ival_T_end_of_day = Period(freq='Min', year=2007, month=1, day=1,
                                   hour=23, minute=59)
        ival_T_end_of_bus = Period(freq='Min', year=2007, month=1, day=1,
                                   hour=23, minute=59)
        ival_T_end_of_hour = Period(freq='Min', year=2007, month=1, day=1,
                                    hour=0, minute=59)

        ival_T_to_A = Period(freq='A', year=2007)
        ival_T_to_Q = Period(freq='Q', year=2007, quarter=1)
        ival_T_to_M = Period(freq='M', year=2007, month=1)
        ival_T_to_W = Period(freq='W', year=2007, month=1, day=7)
        ival_T_to_D = Period(freq='D', year=2007, month=1, day=1)
        ival_T_to_B = Period(freq='B', year=2007, month=1, day=1)
        ival_T_to_H = Period(freq='H', year=2007, month=1, day=1, hour=0)

        ival_T_to_S_start = Period(freq='S', year=2007, month=1, day=1, hour=0,
                                   minute=0, second=0)
        ival_T_to_S_end = Period(freq='S', year=2007, month=1, day=1, hour=0,
                                 minute=0, second=59)

        self.assertEqual(ival_T.asfreq('A'), ival_T_to_A)
        self.assertEqual(ival_T_end_of_year.asfreq('A'), ival_T_to_A)
        self.assertEqual(ival_T.asfreq('Q'), ival_T_to_Q)
        self.assertEqual(ival_T_end_of_quarter.asfreq('Q'), ival_T_to_Q)
        self.assertEqual(ival_T.asfreq('M'), ival_T_to_M)
        self.assertEqual(ival_T_end_of_month.asfreq('M'), ival_T_to_M)
        self.assertEqual(ival_T.asfreq('W'), ival_T_to_W)
        self.assertEqual(ival_T_end_of_week.asfreq('W'), ival_T_to_W)
        self.assertEqual(ival_T.asfreq('D'), ival_T_to_D)
        self.assertEqual(ival_T_end_of_day.asfreq('D'), ival_T_to_D)
        self.assertEqual(ival_T.asfreq('B'), ival_T_to_B)
        self.assertEqual(ival_T_end_of_bus.asfreq('B'), ival_T_to_B)
        self.assertEqual(ival_T.asfreq('H'), ival_T_to_H)
        self.assertEqual(ival_T_end_of_hour.asfreq('H'), ival_T_to_H)

        self.assertEqual(ival_T.asfreq('S', 'S'), ival_T_to_S_start)
        self.assertEqual(ival_T.asfreq('S', 'E'), ival_T_to_S_end)

        self.assertEqual(ival_T.asfreq('Min'), ival_T)
Ejemplo n.º 55
0
    def test_conv_secondly(self):
        # frequency conversion tests: from Secondly Frequency"

        ival_S = Period(freq='S', year=2007, month=1, day=1, hour=0, minute=0,
                        second=0)
        ival_S_end_of_year = Period(freq='S', year=2007, month=12, day=31,
                                    hour=23, minute=59, second=59)
        ival_S_end_of_quarter = Period(freq='S', year=2007, month=3, day=31,
                                       hour=23, minute=59, second=59)
        ival_S_end_of_month = Period(freq='S', year=2007, month=1, day=31,
                                     hour=23, minute=59, second=59)
        ival_S_end_of_week = Period(freq='S', year=2007, month=1, day=7,
                                    hour=23, minute=59, second=59)
        ival_S_end_of_day = Period(freq='S', year=2007, month=1, day=1,
                                   hour=23, minute=59, second=59)
        ival_S_end_of_bus = Period(freq='S', year=2007, month=1, day=1,
                                   hour=23, minute=59, second=59)
        ival_S_end_of_hour = Period(freq='S', year=2007, month=1, day=1,
                                    hour=0, minute=59, second=59)
        ival_S_end_of_minute = Period(freq='S', year=2007, month=1, day=1,
                                      hour=0, minute=0, second=59)

        ival_S_to_A = Period(freq='A', year=2007)
        ival_S_to_Q = Period(freq='Q', year=2007, quarter=1)
        ival_S_to_M = Period(freq='M', year=2007, month=1)
        ival_S_to_W = Period(freq='W', year=2007, month=1, day=7)
        ival_S_to_D = Period(freq='D', year=2007, month=1, day=1)
        ival_S_to_B = Period(freq='B', year=2007, month=1, day=1)
        ival_S_to_H = Period(freq='H', year=2007, month=1, day=1, hour=0)
        ival_S_to_T = Period(freq='Min', year=2007, month=1, day=1, hour=0,
                             minute=0)

        assert ival_S.asfreq('A') == ival_S_to_A
        assert ival_S_end_of_year.asfreq('A') == ival_S_to_A
        assert ival_S.asfreq('Q') == ival_S_to_Q
        assert ival_S_end_of_quarter.asfreq('Q') == ival_S_to_Q
        assert ival_S.asfreq('M') == ival_S_to_M
        assert ival_S_end_of_month.asfreq('M') == ival_S_to_M
        assert ival_S.asfreq('W') == ival_S_to_W
        assert ival_S_end_of_week.asfreq('W') == ival_S_to_W
        assert ival_S.asfreq('D') == ival_S_to_D
        assert ival_S_end_of_day.asfreq('D') == ival_S_to_D
        assert ival_S.asfreq('B') == ival_S_to_B
        assert ival_S_end_of_bus.asfreq('B') == ival_S_to_B
        assert ival_S.asfreq('H') == ival_S_to_H
        assert ival_S_end_of_hour.asfreq('H') == ival_S_to_H
        assert ival_S.asfreq('Min') == ival_S_to_T
        assert ival_S_end_of_minute.asfreq('Min') == ival_S_to_T

        assert ival_S.asfreq('S') == ival_S
Ejemplo n.º 56
0
 def test_periods(self):
     # 13463
     for i in [Period('2010-09', 'M'), Period('2014-Q1', 'Q')]:
         i_rec = self.encode_decode(i)
         assert i == i_rec
Ejemplo n.º 57
0
    def test_conv_hourly(self):
        # frequency conversion tests: from Hourly Frequency"

        ival_H = Period(freq="H", year=2007, month=1, day=1, hour=0)
        ival_H_end_of_year = Period(freq="H",
                                    year=2007,
                                    month=12,
                                    day=31,
                                    hour=23)
        ival_H_end_of_quarter = Period(freq="H",
                                       year=2007,
                                       month=3,
                                       day=31,
                                       hour=23)
        ival_H_end_of_month = Period(freq="H",
                                     year=2007,
                                     month=1,
                                     day=31,
                                     hour=23)
        ival_H_end_of_week = Period(freq="H",
                                    year=2007,
                                    month=1,
                                    day=7,
                                    hour=23)
        ival_H_end_of_day = Period(freq="H",
                                   year=2007,
                                   month=1,
                                   day=1,
                                   hour=23)
        ival_H_end_of_bus = Period(freq="H",
                                   year=2007,
                                   month=1,
                                   day=1,
                                   hour=23)

        ival_H_to_A = Period(freq="A", year=2007)
        ival_H_to_Q = Period(freq="Q", year=2007, quarter=1)
        ival_H_to_M = Period(freq="M", year=2007, month=1)
        ival_H_to_W = Period(freq="W", year=2007, month=1, day=7)
        ival_H_to_D = Period(freq="D", year=2007, month=1, day=1)
        ival_H_to_B = Period(freq="B", year=2007, month=1, day=1)

        ival_H_to_T_start = Period(freq="Min",
                                   year=2007,
                                   month=1,
                                   day=1,
                                   hour=0,
                                   minute=0)
        ival_H_to_T_end = Period(freq="Min",
                                 year=2007,
                                 month=1,
                                 day=1,
                                 hour=0,
                                 minute=59)
        ival_H_to_S_start = Period(freq="S",
                                   year=2007,
                                   month=1,
                                   day=1,
                                   hour=0,
                                   minute=0,
                                   second=0)
        ival_H_to_S_end = Period(freq="S",
                                 year=2007,
                                 month=1,
                                 day=1,
                                 hour=0,
                                 minute=59,
                                 second=59)

        assert ival_H.asfreq("A") == ival_H_to_A
        assert ival_H_end_of_year.asfreq("A") == ival_H_to_A
        assert ival_H.asfreq("Q") == ival_H_to_Q
        assert ival_H_end_of_quarter.asfreq("Q") == ival_H_to_Q
        assert ival_H.asfreq("M") == ival_H_to_M
        assert ival_H_end_of_month.asfreq("M") == ival_H_to_M
        assert ival_H.asfreq("W") == ival_H_to_W
        assert ival_H_end_of_week.asfreq("W") == ival_H_to_W
        assert ival_H.asfreq("D") == ival_H_to_D
        assert ival_H_end_of_day.asfreq("D") == ival_H_to_D
        assert ival_H.asfreq("B") == ival_H_to_B
        assert ival_H_end_of_bus.asfreq("B") == ival_H_to_B

        assert ival_H.asfreq("Min", "S") == ival_H_to_T_start
        assert ival_H.asfreq("Min", "E") == ival_H_to_T_end
        assert ival_H.asfreq("S", "S") == ival_H_to_S_start
        assert ival_H.asfreq("S", "E") == ival_H_to_S_end

        assert ival_H.asfreq("H") == ival_H
Ejemplo n.º 58
0
    def test_unstack_fill(self):

        # GH #9746: fill_value keyword argument for Series
        # and DataFrame unstack

        # From a series
        data = Series([1, 2, 4, 5], dtype=np.int16)
        data.index = MultiIndex.from_tuples(
            [('x', 'a'), ('x', 'b'), ('y', 'b'), ('z', 'a')])

        result = data.unstack(fill_value=-1)
        expected = DataFrame({'a': [1, -1, 5], 'b': [2, 4, -1]},
                             index=['x', 'y', 'z'], dtype=np.int16)
        assert_frame_equal(result, expected)

        # From a series with incorrect data type for fill_value
        result = data.unstack(fill_value=0.5)
        expected = DataFrame({'a': [1, 0.5, 5], 'b': [2, 4, 0.5]},
                             index=['x', 'y', 'z'], dtype=np.float)
        assert_frame_equal(result, expected)

        # From a dataframe
        rows = [[1, 2], [3, 4], [5, 6], [7, 8]]
        df = DataFrame(rows, columns=list('AB'), dtype=np.int32)
        df.index = MultiIndex.from_tuples(
            [('x', 'a'), ('x', 'b'), ('y', 'b'), ('z', 'a')])

        result = df.unstack(fill_value=-1)

        rows = [[1, 3, 2, 4], [-1, 5, -1, 6], [7, -1, 8, -1]]
        expected = DataFrame(rows, index=list('xyz'), dtype=np.int32)
        expected.columns = MultiIndex.from_tuples(
            [('A', 'a'), ('A', 'b'), ('B', 'a'), ('B', 'b')])
        assert_frame_equal(result, expected)

        # From a mixed type dataframe
        df['A'] = df['A'].astype(np.int16)
        df['B'] = df['B'].astype(np.float64)

        result = df.unstack(fill_value=-1)
        expected['A'] = expected['A'].astype(np.int16)
        expected['B'] = expected['B'].astype(np.float64)
        assert_frame_equal(result, expected)

        # From a dataframe with incorrect data type for fill_value
        result = df.unstack(fill_value=0.5)

        rows = [[1, 3, 2, 4], [0.5, 5, 0.5, 6], [7, 0.5, 8, 0.5]]
        expected = DataFrame(rows, index=list('xyz'), dtype=np.float)
        expected.columns = MultiIndex.from_tuples(
            [('A', 'a'), ('A', 'b'), ('B', 'a'), ('B', 'b')])
        assert_frame_equal(result, expected)

        # Test unstacking with date times
        dv = pd.date_range('2012-01-01', periods=4).values
        data = Series(dv)
        data.index = MultiIndex.from_tuples(
            [('x', 'a'), ('x', 'b'), ('y', 'b'), ('z', 'a')])

        result = data.unstack()
        expected = DataFrame({'a': [dv[0], pd.NaT, dv[3]],
                              'b': [dv[1], dv[2], pd.NaT]},
                             index=['x', 'y', 'z'])
        assert_frame_equal(result, expected)

        result = data.unstack(fill_value=dv[0])
        expected = DataFrame({'a': [dv[0], dv[0], dv[3]],
                              'b': [dv[1], dv[2], dv[0]]},
                             index=['x', 'y', 'z'])
        assert_frame_equal(result, expected)

        # Test unstacking with time deltas
        td = [Timedelta(days=i) for i in range(4)]
        data = Series(td)
        data.index = MultiIndex.from_tuples(
            [('x', 'a'), ('x', 'b'), ('y', 'b'), ('z', 'a')])

        result = data.unstack()
        expected = DataFrame({'a': [td[0], pd.NaT, td[3]],
                              'b': [td[1], td[2], pd.NaT]},
                             index=['x', 'y', 'z'])
        assert_frame_equal(result, expected)

        result = data.unstack(fill_value=td[1])
        expected = DataFrame({'a': [td[0], td[1], td[3]],
                              'b': [td[1], td[2], td[1]]},
                             index=['x', 'y', 'z'])
        assert_frame_equal(result, expected)

        # Test unstacking with period
        periods = [Period('2012-01'), Period('2012-02'), Period('2012-03'),
                   Period('2012-04')]
        data = Series(periods)
        data.index = MultiIndex.from_tuples(
            [('x', 'a'), ('x', 'b'), ('y', 'b'), ('z', 'a')])

        result = data.unstack()
        expected = DataFrame({'a': [periods[0], None, periods[3]],
                              'b': [periods[1], periods[2], None]},
                             index=['x', 'y', 'z'])
        assert_frame_equal(result, expected)

        result = data.unstack(fill_value=periods[1])
        expected = DataFrame({'a': [periods[0], periods[1], periods[3]],
                              'b': [periods[1], periods[2], periods[1]]},
                             index=['x', 'y', 'z'])
        assert_frame_equal(result, expected)

        # Test unstacking with categorical
        data = pd.Series(['a', 'b', 'c', 'a'], dtype='category')
        data.index = pd.MultiIndex.from_tuples(
            [('x', 'a'), ('x', 'b'), ('y', 'b'), ('z', 'a')])

        # By default missing values will be NaN
        result = data.unstack()
        expected = DataFrame({'a': pd.Categorical(list('axa'),
                                                  categories=list('abc')),
                              'b': pd.Categorical(list('bcx'),
                                                  categories=list('abc'))},
                             index=list('xyz'))
        assert_frame_equal(result, expected)

        # Fill with non-category results in NaN entries similar to above
        result = data.unstack(fill_value='d')
        assert_frame_equal(result, expected)

        # Fill with category value replaces missing values as expected
        result = data.unstack(fill_value='c')
        expected = DataFrame({'a': pd.Categorical(list('aca'),
                                                  categories=list('abc')),
                              'b': pd.Categorical(list('bcc'),
                                                  categories=list('abc'))},
                             index=list('xyz'))
        assert_frame_equal(result, expected)
Ejemplo n.º 59
0
 def setup(self, freq):
     self.per = Period('2012-06-01', freq=freq)
Ejemplo n.º 60
0
def test_count_nonnumeric_types():
    # GH12541
    cols = [
        "int",
        "float",
        "string",
        "datetime",
        "timedelta",
        "periods",
        "fl_inf",
        "fl_nan",
        "str_nan",
        "dt_nat",
        "periods_nat",
    ]
    dt_nat_col = [Timestamp("20170101"), Timestamp("20170203"), Timestamp(None)]

    df = DataFrame(
        {
            "int": [1, 2, 3],
            "float": [4.0, 5.0, 6.0],
            "string": list("abc"),
            "datetime": date_range("20170101", periods=3),
            "timedelta": timedelta_range("1 s", periods=3, freq="s"),
            "periods": [
                Period("2012-01"),
                Period("2012-02"),
                Period("2012-03"),
            ],
            "fl_inf": [1.0, 2.0, np.Inf],
            "fl_nan": [1.0, 2.0, np.NaN],
            "str_nan": ["aa", "bb", np.NaN],
            "dt_nat": dt_nat_col,
            "periods_nat": [
                Period("2012-01"),
                Period("2012-02"),
                Period(None),
            ],
        },
        columns=cols,
    )

    expected = DataFrame(
        {
            "int": [1.0, 2.0, 2.0],
            "float": [1.0, 2.0, 2.0],
            "string": [1.0, 2.0, 2.0],
            "datetime": [1.0, 2.0, 2.0],
            "timedelta": [1.0, 2.0, 2.0],
            "periods": [1.0, 2.0, 2.0],
            "fl_inf": [1.0, 2.0, 2.0],
            "fl_nan": [1.0, 2.0, 1.0],
            "str_nan": [1.0, 2.0, 1.0],
            "dt_nat": [1.0, 2.0, 1.0],
            "periods_nat": [1.0, 2.0, 1.0],
        },
        columns=cols,
    )

    result = df.rolling(window=2, min_periods=0).count()
    tm.assert_frame_equal(result, expected)

    result = df.rolling(1, min_periods=0).count()
    expected = df.notna().astype(float)
    tm.assert_frame_equal(result, expected)