Example #1
0
    def test_isnull(self):
        self.assertFalse(isnull(1.))
        self.assertTrue(isnull(None))
        self.assertTrue(isnull(np.NaN))
        self.assertTrue(float('nan'))
        self.assertFalse(isnull(np.inf))
        self.assertFalse(isnull(-np.inf))

        # series
        for s in [tm.makeFloatSeries(), tm.makeStringSeries(),
                  tm.makeObjectSeries(), tm.makeTimeSeries(),
                  tm.makePeriodSeries()]:
            assert isinstance(isnull(s), Series)

        # frame
        for df in [tm.makeTimeDataFrame(), tm.makePeriodFrame(),
                   tm.makeMixedDataFrame()]:
            result = isnull(df)
            expected = df.apply(isnull)
            tm.assert_frame_equal(result, expected)

        # panel
        with catch_warnings(record=True):
            for p in [tm.makePanel(), tm.makePeriodPanel(),
                      tm.add_nans(tm.makePanel())]:
                result = isnull(p)
                expected = p.apply(isnull)
                tm.assert_panel_equal(result, expected)

        # panel 4d
        with catch_warnings(record=True):
            for p in [tm.makePanel4D(), tm.add_nans_panel4d(tm.makePanel4D())]:
                result = isnull(p)
                expected = p.apply(isnull)
                tm.assert_panel4d_equal(result, expected)
Example #2
0
    def test_select(self):
        with catch_warnings(record=True):

            p = self.panel4d

            # select labels
            result = p.select(lambda x: x in ('l1', 'l3'), axis='labels')
            expected = p.reindex(labels=['l1', 'l3'])
            tm.assert_panel4d_equal(result, expected)

            # select items
            result = p.select(lambda x: x in ('ItemA', 'ItemC'), axis='items')
            expected = p.reindex(items=['ItemA', 'ItemC'])
            tm.assert_panel4d_equal(result, expected)

            # select major_axis
            result = p.select(lambda x: x >= datetime(2000, 1, 15),
                              axis='major')
            new_major = p.major_axis[p.major_axis >= datetime(2000, 1, 15)]
            expected = p.reindex(major=new_major)
            tm.assert_panel4d_equal(result, expected)

            # select minor_axis
            result = p.select(lambda x: x in ('D', 'A'), axis=3)
            expected = p.reindex(minor=['A', 'D'])
            tm.assert_panel4d_equal(result, expected)

            # corner case, empty thing
            result = p.select(lambda x: x in ('foo',), axis='items')
            tm.assert_panel4d_equal(result, p.reindex(items=[]))
Example #3
0
    def test_swapaxes(self):
        with catch_warnings(record=True):
            result = self.panel4d.swapaxes('labels', 'items')
            self.assertIs(result.items, self.panel4d.labels)

            result = self.panel4d.swapaxes('labels', 'minor')
            self.assertIs(result.labels, self.panel4d.minor_axis)

            result = self.panel4d.swapaxes('items', 'minor')
            self.assertIs(result.items, self.panel4d.minor_axis)

            result = self.panel4d.swapaxes('items', 'major')
            self.assertIs(result.items, self.panel4d.major_axis)

            result = self.panel4d.swapaxes('major', 'minor')
            self.assertIs(result.major_axis, self.panel4d.minor_axis)

            # this should also work
            result = self.panel4d.swapaxes(0, 1)
            self.assertIs(result.labels, self.panel4d.items)

            # this works, but return a copy
            result = self.panel4d.swapaxes('items', 'items')
            assert_panel4d_equal(self.panel4d, result)
            self.assertNotEqual(id(self.panel4d), id(result))
Example #4
0
    def test_swapaxes(self):
        with catch_warnings(record=True):
            result = self.panel4d.swapaxes('labels', 'items')
            assert result.items is self.panel4d.labels

            result = self.panel4d.swapaxes('labels', 'minor')
            assert result.labels is self.panel4d.minor_axis

            result = self.panel4d.swapaxes('items', 'minor')
            assert result.items is self.panel4d.minor_axis

            result = self.panel4d.swapaxes('items', 'major')
            assert result.items is self.panel4d.major_axis

            result = self.panel4d.swapaxes('major', 'minor')
            assert result.major_axis is self.panel4d.minor_axis

            # this should also work
            result = self.panel4d.swapaxes(0, 1)
            assert result.labels is self.panel4d.items

            # this works, but return a copy
            result = self.panel4d.swapaxes('items', 'items')
            tm.assert_panel4d_equal(self.panel4d, result)
            assert id(self.panel4d) != id(result)
Example #5
0
    def test_constructor_dict_mixed(self):
        with catch_warnings(record=True):
            data = dict((k, v.values) for k, v in self.panel4d.iteritems())
            result = Panel4D(data)

            exp_major = Index(np.arange(len(self.panel4d.major_axis)))
            tm.assert_index_equal(result.major_axis, exp_major)

            result = Panel4D(data,
                             labels=self.panel4d.labels,
                             items=self.panel4d.items,
                             major_axis=self.panel4d.major_axis,
                             minor_axis=self.panel4d.minor_axis)
            tm.assert_panel4d_equal(result, self.panel4d)

            data['l2'] = self.panel4d['l2']

            result = Panel4D(data)
            tm.assert_panel4d_equal(result, self.panel4d)

            # corner, blow up
            data['l2'] = data['l2']['ItemB']
            pytest.raises(Exception, Panel4D, data)

            data['l2'] = self.panel4d['l2'].values[:, :, :-1]
            pytest.raises(Exception, Panel4D, data)
Example #6
0
    def test_constructor_dict_mixed(self):
        with tm.assert_produces_warning(FutureWarning, check_stacklevel=False):
            data = dict((k, v.values) for k, v in self.panel4d.iteritems())
            result = Panel4D(data)

            exp_major = Index(np.arange(len(self.panel4d.major_axis)))
            self.assert_index_equal(result.major_axis, exp_major)

            result = Panel4D(data,
                             labels=self.panel4d.labels,
                             items=self.panel4d.items,
                             major_axis=self.panel4d.major_axis,
                             minor_axis=self.panel4d.minor_axis)
            assert_panel4d_equal(result, self.panel4d)

            data['l2'] = self.panel4d['l2']

            result = Panel4D(data)
            assert_panel4d_equal(result, self.panel4d)

            # corner, blow up
            data['l2'] = data['l2']['ItemB']
            self.assertRaises(Exception, Panel4D, data)

            data['l2'] = self.panel4d['l2'].values[:, :, :-1]
            self.assertRaises(Exception, Panel4D, data)
Example #7
0
    def test_update(self):

        with catch_warnings(record=True):
            p4d = Panel4D([[[[1.5, np.nan, 3.],
                             [1.5, np.nan, 3.],
                             [1.5, np.nan, 3.],
                             [1.5, np.nan, 3.]],
                            [[1.5, np.nan, 3.],
                             [1.5, np.nan, 3.],
                             [1.5, np.nan, 3.],
                             [1.5, np.nan, 3.]]]])

            other = Panel4D([[[[3.6, 2., np.nan]],
                              [[np.nan, np.nan, 7]]]])

            p4d.update(other)

            expected = Panel4D([[[[3.6, 2, 3.],
                                  [1.5, np.nan, 3.],
                                  [1.5, np.nan, 3.],
                                  [1.5, np.nan, 3.]],
                                 [[1.5, np.nan, 7],
                                  [1.5, np.nan, 3.],
                                  [1.5, np.nan, 3.],
                                  [1.5, np.nan, 3.]]]])

            tm.assert_panel4d_equal(p4d, expected)
Example #8
0
    def test_update(self):

        with tm.assert_produces_warning(FutureWarning, check_stacklevel=False):
            p4d = Panel4D([[[[1.5, np.nan, 3.],
                             [1.5, np.nan, 3.],
                             [1.5, np.nan, 3.],
                             [1.5, np.nan, 3.]],
                            [[1.5, np.nan, 3.],
                             [1.5, np.nan, 3.],
                             [1.5, np.nan, 3.],
                             [1.5, np.nan, 3.]]]])

            other = Panel4D([[[[3.6, 2., np.nan]],
                              [[np.nan, np.nan, 7]]]])

            p4d.update(other)

            expected = Panel4D([[[[3.6, 2, 3.],
                                  [1.5, np.nan, 3.],
                                  [1.5, np.nan, 3.],
                                  [1.5, np.nan, 3.]],
                                 [[1.5, np.nan, 7],
                                  [1.5, np.nan, 3.],
                                  [1.5, np.nan, 3.],
                                  [1.5, np.nan, 3.]]]])

            assert_panel4d_equal(p4d, expected)
Example #9
0
    def test_swapaxes(self):
        with tm.assert_produces_warning(FutureWarning, check_stacklevel=False):
            result = self.panel4d.swapaxes('labels', 'items')
            self.assertIs(result.items, self.panel4d.labels)

            result = self.panel4d.swapaxes('labels', 'minor')
            self.assertIs(result.labels, self.panel4d.minor_axis)

            result = self.panel4d.swapaxes('items', 'minor')
            self.assertIs(result.items, self.panel4d.minor_axis)

            result = self.panel4d.swapaxes('items', 'major')
            self.assertIs(result.items, self.panel4d.major_axis)

            result = self.panel4d.swapaxes('major', 'minor')
            self.assertIs(result.major_axis, self.panel4d.minor_axis)

            # this should also work
            result = self.panel4d.swapaxes(0, 1)
            self.assertIs(result.labels, self.panel4d.items)

            # this works, but return a copy
            result = self.panel4d.swapaxes('items', 'items')
            assert_panel4d_equal(self.panel4d, result)
            self.assertNotEqual(id(self.panel4d), id(result))
Example #10
0
    def test_take(self):
        indices = [1, 5, -2, 6, 3, -1]
        for s in [tm.makeFloatSeries(), tm.makeStringSeries(),
                  tm.makeObjectSeries()]:
            out = s.take(indices)
            expected = Series(data=s.values.take(indices),
                              index=s.index.take(indices), dtype=s.dtype)
            tm.assert_series_equal(out, expected)
        for df in [tm.makeTimeDataFrame()]:
            out = df.take(indices)
            expected = DataFrame(data=df.values.take(indices, axis=0),
                                 index=df.index.take(indices),
                                 columns=df.columns)
            tm.assert_frame_equal(out, expected)

        indices = [-3, 2, 0, 1]
        with catch_warnings(record=True):
            for p in [tm.makePanel()]:
                out = p.take(indices)
                expected = Panel(data=p.values.take(indices, axis=0),
                                 items=p.items.take(indices),
                                 major_axis=p.major_axis,
                                 minor_axis=p.minor_axis)
                tm.assert_panel_equal(out, expected)

        with catch_warnings(record=True):
            for p4d in [tm.makePanel4D()]:
                out = p4d.take(indices)
                expected = Panel4D(data=p4d.values.take(indices, axis=0),
                                   labels=p4d.labels.take(indices),
                                   major_axis=p4d.major_axis,
                                   minor_axis=p4d.minor_axis,
                                   items=p4d.items)
                tm.assert_panel4d_equal(out, expected)
Example #11
0
    def test_squeeze(self):
        # noop
        for s in [ tm.makeFloatSeries(), tm.makeStringSeries(), tm.makeObjectSeries() ]:
            tm.assert_series_equal(s.squeeze(),s)
        for df in [ tm.makeTimeDataFrame() ]:
            tm.assert_frame_equal(df.squeeze(),df)
        for p in [ tm.makePanel() ]:
            tm.assert_panel_equal(p.squeeze(),p)
        for p4d in [ tm.makePanel4D() ]:
            tm.assert_panel4d_equal(p4d.squeeze(),p4d)

        # squeezing
        df = tm.makeTimeDataFrame().reindex(columns=['A'])
        tm.assert_series_equal(df.squeeze(),df['A'])

        p = tm.makePanel().reindex(items=['ItemA'])
        tm.assert_frame_equal(p.squeeze(),p['ItemA'])

        p = tm.makePanel().reindex(items=['ItemA'],minor_axis=['A'])
        tm.assert_series_equal(p.squeeze(),p.ix['ItemA',:,'A'])

        p4d = tm.makePanel4D().reindex(labels=['label1'])
        tm.assert_panel_equal(p4d.squeeze(),p4d['label1'])

        p4d = tm.makePanel4D().reindex(labels=['label1'],items=['ItemA'])
        tm.assert_frame_equal(p4d.squeeze(),p4d.ix['label1','ItemA'])
Example #12
0
    def test_numpy_transpose(self):
        msg = "the 'axes' parameter is not supported"

        s = tm.makeFloatSeries()
        tm.assert_series_equal(
            np.transpose(s), s)
        tm.assert_raises_regex(ValueError, msg,
                               np.transpose, s, axes=1)

        df = tm.makeTimeDataFrame()
        tm.assert_frame_equal(np.transpose(
            np.transpose(df)), df)
        tm.assert_raises_regex(ValueError, msg,
                               np.transpose, df, axes=1)

        with catch_warnings(record=True):
            p = tm.makePanel()
            tm.assert_panel_equal(np.transpose(
                np.transpose(p, axes=(2, 0, 1)),
                axes=(1, 2, 0)), p)

        with catch_warnings(record=True):
            p4d = tm.makePanel4D()
            tm.assert_panel4d_equal(np.transpose(
                np.transpose(p4d, axes=(2, 0, 3, 1)),
                axes=(1, 3, 0, 2)), p4d)
Example #13
0
    def test_update(self):

        p4d = Panel4D([[[[1.5, np.nan, 3.],
                         [1.5, np.nan, 3.],
                         [1.5, np.nan, 3.],
                         [1.5, np.nan, 3.]],
                        [[1.5, np.nan, 3.],
                         [1.5, np.nan, 3.],
                         [1.5, np.nan, 3.],
                         [1.5, np.nan, 3.]]]])

        other = Panel4D([[[[3.6, 2., np.nan]],
                          [[np.nan, np.nan, 7]]]])

        p4d.update(other)

        expected = Panel4D([[[[3.6, 2, 3.],
                              [1.5, np.nan, 3.],
                              [1.5, np.nan, 3.],
                              [1.5, np.nan, 3.]],
                             [[1.5, np.nan, 7],
                              [1.5, np.nan, 3.],
                              [1.5, np.nan, 3.],
                              [1.5, np.nan, 3.]]]])

        assert_panel4d_equal(p4d, expected)
Example #14
0
    def test_constructor_dict_mixed(self):
        data = dict((k, v.values) for k, v in self.panel4d.iteritems())
        result = Panel4D(data)
        exp_major = Index(np.arange(len(self.panel4d.major_axis)))
        self.assert_index_equal(result.major_axis, exp_major)

        result = Panel4D(
            data,
            labels=self.panel4d.labels,
            items=self.panel4d.items,
            major_axis=self.panel4d.major_axis,
            minor_axis=self.panel4d.minor_axis,
        )
        assert_panel4d_equal(result, self.panel4d)

        data["l2"] = self.panel4d["l2"]
        result = Panel4D(data)
        assert_panel4d_equal(result, self.panel4d)

        # corner, blow up
        data["l2"] = data["l2"]["ItemB"]
        self.assertRaises(Exception, Panel4D, data)

        data["l2"] = self.panel4d["l2"].values[:, :, :-1]
        self.assertRaises(Exception, Panel4D, data)
Example #15
0
def test_isnull():
    assert not isnull(1.)
    assert isnull(None)
    assert isnull(np.NaN)
    assert not isnull(np.inf)
    assert not isnull(-np.inf)

    # series
    for s in [tm.makeFloatSeries(),tm.makeStringSeries(),
              tm.makeObjectSeries(),tm.makeTimeSeries(),tm.makePeriodSeries()]:
        assert(isinstance(isnull(s), Series))

    # frame
    for df in [tm.makeTimeDataFrame(),tm.makePeriodFrame(),tm.makeMixedDataFrame()]:
        result = isnull(df)
        expected = df.apply(isnull)
        tm.assert_frame_equal(result, expected)

    # panel
    for p in [ tm.makePanel(), tm.makePeriodPanel(), tm.add_nans(tm.makePanel()) ]:
        result = isnull(p)
        expected = p.apply(isnull)
        tm.assert_panel_equal(result, expected)

    # panel 4d
    for p in [ tm.makePanel4D(), tm.add_nans_panel4d(tm.makePanel4D()) ]:
        result = isnull(p)
        expected = p.apply(isnull)
        tm.assert_panel4d_equal(result, expected)
Example #16
0
 def test_reindex_like(self):
     # reindex_like
     smaller = self.panel4d.reindex(labels=self.panel4d.labels[:-1],
                                    items=self.panel4d.items[:-1],
                                    major=self.panel4d.major_axis[:-1],
                                    minor=self.panel4d.minor_axis[:-1])
     smaller_like = self.panel4d.reindex_like(smaller)
     assert_panel4d_equal(smaller, smaller_like)
Example #17
0
 def test_reindex_like(self):
     # reindex_like
     with catch_warnings(record=True):
         smaller = self.panel4d.reindex(labels=self.panel4d.labels[:-1],
                                        items=self.panel4d.items[:-1],
                                        major=self.panel4d.major_axis[:-1],
                                        minor=self.panel4d.minor_axis[:-1])
         smaller_like = self.panel4d.reindex_like(smaller)
         tm.assert_panel4d_equal(smaller, smaller_like)
Example #18
0
 def test_reindex_like(self):
     # reindex_like
     with tm.assert_produces_warning(FutureWarning, check_stacklevel=False):
         smaller = self.panel4d.reindex(labels=self.panel4d.labels[:-1],
                                        items=self.panel4d.items[:-1],
                                        major=self.panel4d.major_axis[:-1],
                                        minor=self.panel4d.minor_axis[:-1])
         smaller_like = self.panel4d.reindex_like(smaller)
         assert_panel4d_equal(smaller, smaller_like)
Example #19
0
    def test_reindex(self):
        ref = self.panel4d['l2']

        # labels
        result = self.panel4d.reindex(labels=['l1', 'l2'])
        assert_panel_equal(result['l2'], ref)

        # items
        result = self.panel4d.reindex(items=['ItemA', 'ItemB'])
        assert_frame_equal(result['l2']['ItemB'], ref['ItemB'])

        # major
        new_major = list(self.panel4d.major_axis[:10])
        result = self.panel4d.reindex(major=new_major)
        assert_frame_equal(
            result['l2']['ItemB'], ref['ItemB'].reindex(index=new_major))

        # raise exception put both major and major_axis
        self.assertRaises(Exception, self.panel4d.reindex,
                          major_axis=new_major, major=new_major)

        # minor
        new_minor = list(self.panel4d.minor_axis[:2])
        result = self.panel4d.reindex(minor=new_minor)
        assert_frame_equal(
            result['l2']['ItemB'], ref['ItemB'].reindex(columns=new_minor))

        result = self.panel4d.reindex(labels=self.panel4d.labels,
                                      items=self.panel4d.items,
                                      major=self.panel4d.major_axis,
                                      minor=self.panel4d.minor_axis)

        assert(result.labels is self.panel4d.labels)
        assert(result.items is self.panel4d.items)
        assert(result.major_axis is self.panel4d.major_axis)
        assert(result.minor_axis is self.panel4d.minor_axis)

        # don't necessarily copy
        result = self.panel4d.reindex()
        assert_panel4d_equal(result,self.panel4d)
        self.assert_((result is self.panel4d) == False)

        # with filling
        smaller_major = self.panel4d.major_axis[::5]
        smaller = self.panel4d.reindex(major=smaller_major)

        larger = smaller.reindex(major=self.panel4d.major_axis,
                                 method='pad')

        assert_panel_equal(larger.ix[:, :, self.panel4d.major_axis[1], :],
                           smaller.ix[:, :, smaller_major[0], :])

        # don't necessarily copy
        result = self.panel4d.reindex(
            major=self.panel4d.major_axis, copy=False)
        assert_panel4d_equal(result,self.panel4d)
        self.assert_((result is self.panel4d) == False)
Example #20
0
    def test_squeeze(self):
        # noop
        for s in [tm.makeFloatSeries(), tm.makeStringSeries(),
                  tm.makeObjectSeries()]:
            tm.assert_series_equal(s.squeeze(), s)
        for df in [tm.makeTimeDataFrame()]:
            tm.assert_frame_equal(df.squeeze(), df)
        with catch_warnings(record=True):
            for p in [tm.makePanel()]:
                tm.assert_panel_equal(p.squeeze(), p)
        with catch_warnings(record=True):
            for p4d in [tm.makePanel4D()]:
                tm.assert_panel4d_equal(p4d.squeeze(), p4d)

        # squeezing
        df = tm.makeTimeDataFrame().reindex(columns=['A'])
        tm.assert_series_equal(df.squeeze(), df['A'])

        with catch_warnings(record=True):
            p = tm.makePanel().reindex(items=['ItemA'])
            tm.assert_frame_equal(p.squeeze(), p['ItemA'])

            p = tm.makePanel().reindex(items=['ItemA'], minor_axis=['A'])
            tm.assert_series_equal(p.squeeze(), p.loc['ItemA', :, 'A'])

        with catch_warnings(record=True):
            p4d = tm.makePanel4D().reindex(labels=['label1'])
            tm.assert_panel_equal(p4d.squeeze(), p4d['label1'])

        with catch_warnings(record=True):
            p4d = tm.makePanel4D().reindex(labels=['label1'], items=['ItemA'])
            tm.assert_frame_equal(p4d.squeeze(), p4d.loc['label1', 'ItemA'])

        # don't fail with 0 length dimensions GH11229 & GH8999
        empty_series = Series([], name='five')
        empty_frame = DataFrame([empty_series])
        with catch_warnings(record=True):
            empty_panel = Panel({'six': empty_frame})

        [tm.assert_series_equal(empty_series, higher_dim.squeeze())
         for higher_dim in [empty_series, empty_frame, empty_panel]]

        # axis argument
        df = tm.makeTimeDataFrame(nper=1).iloc[:, :1]
        assert df.shape == (1, 1)
        tm.assert_series_equal(df.squeeze(axis=0), df.iloc[0])
        tm.assert_series_equal(df.squeeze(axis='index'), df.iloc[0])
        tm.assert_series_equal(df.squeeze(axis=1), df.iloc[:, 0])
        tm.assert_series_equal(df.squeeze(axis='columns'), df.iloc[:, 0])
        assert df.squeeze() == df.iloc[0, 0]
        pytest.raises(ValueError, df.squeeze, axis=2)
        pytest.raises(ValueError, df.squeeze, axis='x')

        df = tm.makeTimeDataFrame(3)
        tm.assert_frame_equal(df.squeeze(axis=0), df)
Example #21
0
    def test_reindex(self):
        with catch_warnings(record=True):
            ref = self.panel4d['l2']

            # labels
            result = self.panel4d.reindex(labels=['l1', 'l2'])
            tm.assert_panel_equal(result['l2'], ref)

            # items
            result = self.panel4d.reindex(items=['ItemA', 'ItemB'])
            assert_frame_equal(result['l2']['ItemB'], ref['ItemB'])

            # major
            new_major = list(self.panel4d.major_axis[:10])
            result = self.panel4d.reindex(major=new_major)
            assert_frame_equal(
                result['l2']['ItemB'], ref['ItemB'].reindex(index=new_major))

            # raise exception put both major and major_axis
            pytest.raises(Exception, self.panel4d.reindex,
                          major_axis=new_major, major=new_major)

            # minor
            new_minor = list(self.panel4d.minor_axis[:2])
            result = self.panel4d.reindex(minor=new_minor)
            assert_frame_equal(
                result['l2']['ItemB'], ref['ItemB'].reindex(columns=new_minor))

            result = self.panel4d.reindex(labels=self.panel4d.labels,
                                          items=self.panel4d.items,
                                          major=self.panel4d.major_axis,
                                          minor=self.panel4d.minor_axis)

            # don't necessarily copy
            result = self.panel4d.reindex()
            tm.assert_panel4d_equal(result, self.panel4d)
            assert result is not self.panel4d

            # with filling
            smaller_major = self.panel4d.major_axis[::5]
            smaller = self.panel4d.reindex(major=smaller_major)

            larger = smaller.reindex(major=self.panel4d.major_axis,
                                     method='pad')

            tm.assert_panel_equal(larger.loc[:, :,
                                             self.panel4d.major_axis[1], :],
                                  smaller.loc[:, :, smaller_major[0], :])

            # don't necessarily copy
            result = self.panel4d.reindex(
                major=self.panel4d.major_axis, copy=False)
            tm.assert_panel4d_equal(result, self.panel4d)
            assert result is self.panel4d
Example #22
0
    def test_constructor_resize(self):
        with tm.assert_produces_warning(FutureWarning, check_stacklevel=False):
            data = self.panel4d._data
            labels = self.panel4d.labels[:-1]
            items = self.panel4d.items[:-1]
            major = self.panel4d.major_axis[:-1]
            minor = self.panel4d.minor_axis[:-1]

            result = Panel4D(data, labels=labels, items=items,
                             major_axis=major, minor_axis=minor)
            expected = self.panel4d.reindex(
                labels=labels, items=items, major=major, minor=minor)
            assert_panel4d_equal(result, expected)

            result = Panel4D(data, items=items, major_axis=major)
            expected = self.panel4d.reindex(items=items, major=major)
            assert_panel4d_equal(result, expected)

            result = Panel4D(data, items=items)
            expected = self.panel4d.reindex(items=items)
            assert_panel4d_equal(result, expected)

            result = Panel4D(data, minor_axis=minor)
            expected = self.panel4d.reindex(minor=minor)
            assert_panel4d_equal(result, expected)
Example #23
0
    def test_constructor_resize(self):
        with catch_warnings(record=True):
            data = self.panel4d._data
            labels = self.panel4d.labels[:-1]
            items = self.panel4d.items[:-1]
            major = self.panel4d.major_axis[:-1]
            minor = self.panel4d.minor_axis[:-1]

            result = Panel4D(data, labels=labels, items=items,
                             major_axis=major, minor_axis=minor)
            expected = self.panel4d.reindex(
                labels=labels, items=items, major=major, minor=minor)
            tm.assert_panel4d_equal(result, expected)

            result = Panel4D(data, items=items, major_axis=major)
            expected = self.panel4d.reindex(items=items, major=major)
            tm.assert_panel4d_equal(result, expected)

            result = Panel4D(data, items=items)
            expected = self.panel4d.reindex(items=items)
            tm.assert_panel4d_equal(result, expected)

            result = Panel4D(data, minor_axis=minor)
            expected = self.panel4d.reindex(minor=minor)
            tm.assert_panel4d_equal(result, expected)
Example #24
0
    def test_ndim_indexables(self):
        """ test using ndim tables in new ways"""

        p4d = tm.makePanel4D()

        # append then change (will take existing schema)
        self.store.remove('p4d')
        self.store.append('p4d', p4d.ix[:,:,:10,:], axes=['items','major_axis','minor_axis'])
        self.store.append('p4d', p4d.ix[:,:,10:,:], axes=['labels','items','major_axis'])

        # pass incorrect number of axes
        self.store.remove('p4d')
        self.assertRaises(Exception, self.store.append, 'p4d', p4d.ix[:,:,:10,:], axes=['major_axis','minor_axis'])

        # different than default indexables
        self.store.remove('p4d')
        self.store.append('p4d', p4d.ix[:,:,:10,:], axes=[0,2,3])
        self.store.append('p4d', p4d.ix[:,:,10:,:], axes=[0,2,3])
        tm.assert_panel4d_equal(self.store['p4d'], p4d)

        # partial selection
        result = self.store.select('p4d',['labels=l1'])
        expected = p4d.reindex(labels = ['l1'])
        tm.assert_panel4d_equal(result, expected)

        # partial selection2
        result = self.store.select('p4d',[Term('labels=l1'), Term('items=ItemA'), Term('minor_axis=B')])
        expected = p4d.reindex(labels = ['l1'], items = ['ItemA'], minor_axis = ['B'])
        tm.assert_panel4d_equal(result, expected)

        # non-existant partial selection
        result = self.store.select('p4d',[Term('labels=l1'), Term('items=Item1'), Term('minor_axis=B')])
        expected = p4d.reindex(labels = ['l1'], items = [], minor_axis = ['B'])
        tm.assert_panel4d_equal(result, expected)
Example #25
0
    def test_panel4d_concat(self):
        p4d = tm.makePanel4D()

        p1 = p4d.ix[:, :, :5, :]
        p2 = p4d.ix[:, :, 5:, :]

        result = concat([p1, p2], axis=2)
        tm.assert_panel4d_equal(result, p4d)

        p1 = p4d.ix[:, :, :, :2]
        p2 = p4d.ix[:, :, :, 2:]

        result = concat([p1, p2], axis=3)
        tm.assert_panel4d_equal(result, p4d)
Example #26
0
    def test_terms(self):

        wp = tm.makePanel()
        p4d = tm.makePanel4D()
        self.store.put('wp', wp, table=True)
        self.store.put('p4d', p4d, table=True)

        # some invalid terms
        terms = [
            [ 'minor', ['A','B'] ],
            [ 'index', ['20121114'] ],
            [ 'index', ['20121114', '20121114'] ],
            ]
        for t in terms:
            self.assertRaises(Exception, self.store.select, 'wp', t)

        self.assertRaises(Exception, Term.__init__)
        self.assertRaises(Exception, Term.__init__, 'blah')
        self.assertRaises(Exception, Term.__init__, 'index')
        self.assertRaises(Exception, Term.__init__, 'index', '==')
        self.assertRaises(Exception, Term.__init__, 'index', '>', 5)

        # panel
        result = self.store.select('wp',[ Term('major_axis<20000108'), Term('minor_axis', '=', ['A','B']) ])
        expected = wp.truncate(after='20000108').reindex(minor=['A', 'B'])
        tm.assert_panel_equal(result, expected)

        # p4d
        result = self.store.select('p4d',[ Term('major_axis<20000108'), Term('minor_axis', '=', ['A','B']) ])
        expected = p4d.truncate(after='20000108').reindex(minor=['A', 'B'])
        tm.assert_panel4d_equal(result, expected)

        # valid terms
        terms = [
            dict(field = 'major_axis', op = '>', value = '20121114'),
            ('major_axis', '20121114'),
            ('major_axis', '>', '20121114'),
            (('major_axis', ['20121114','20121114']),),
            ('major_axis', datetime(2012,11,14)),
            'major_axis>20121114',
            'major_axis>20121114',
            'major_axis>20121114',
            (('minor_axis', ['A','B']),),
            (('minor_axis', ['A','B']),),
            ((('minor_axis', ['A','B']),),),
            ]

        for t in terms:
           self.store.select('wp', t)
           self.store.select('p4d', t)
Example #27
0
    def test_sort_index(self):
        import random

        rlabels = list(self.panel4d.labels)
        ritems = list(self.panel4d.items)
        rmajor = list(self.panel4d.major_axis)
        rminor = list(self.panel4d.minor_axis)
        random.shuffle(rlabels)
        random.shuffle(ritems)
        random.shuffle(rmajor)
        random.shuffle(rminor)

        random_order = self.panel4d.reindex(labels=rlabels)
        sorted_panel4d = random_order.sort_index(axis=0)
        assert_panel4d_equal(sorted_panel4d, self.panel4d)
Example #28
0
    def test_panel4d_concat_mixed_type(self):
        p4d = tm.makePanel4D()

        # if things are a bit misbehaved
        p1 = p4d.ix[:, :2, :, :2]
        p2 = p4d.ix[:, :, :, 2:]
        p1['L5'] = 'baz'

        result = concat([p1, p2], axis=3)

        p2['L5'] = np.nan
        expected = concat([p1, p2], axis=3)
        expected = expected.ix[result.labels]

        tm.assert_panel4d_equal(result, expected)
Example #29
0
    def test_panel4d_concat(self):
        with tm.assert_produces_warning(FutureWarning, check_stacklevel=False):
            p4d = tm.makePanel4D()

            p1 = p4d.ix[:, :, :5, :]
            p2 = p4d.ix[:, :, 5:, :]

            result = concat([p1, p2], axis=2)
            tm.assert_panel4d_equal(result, p4d)

            p1 = p4d.ix[:, :, :, :2]
            p2 = p4d.ix[:, :, :, 2:]

            result = concat([p1, p2], axis=3)
            tm.assert_panel4d_equal(result, p4d)
Example #30
0
    def test_table_mixed_dtypes(self):

        # frame
        def _make_one_df():
            df = tm.makeDataFrame()
            df['obj1'] = 'foo'
            df['obj2'] = 'bar'
            df['bool1'] = df['A'] > 0
            df['bool2'] = df['B'] > 0
            df['bool3'] = True
            df['int1'] = 1
            df['int2'] = 2
            return df.consolidate()

        df1 = _make_one_df()

        self.store.append('df1_mixed', df1)
        tm.assert_frame_equal(self.store.select('df1_mixed'), df1)

        # panel
        def _make_one_panel():
            wp = tm.makePanel()
            wp['obj1'] = 'foo'
            wp['obj2'] = 'bar'
            wp['bool1'] = wp['ItemA'] > 0
            wp['bool2'] = wp['ItemB'] > 0
            wp['int1'] = 1
            wp['int2'] = 2
            return wp.consolidate()
        p1 = _make_one_panel()

        self.store.append('p1_mixed', p1)
        tm.assert_panel_equal(self.store.select('p1_mixed'), p1)

        # ndim
        def _make_one_p4d():
            wp = tm.makePanel4D()
            wp['obj1'] = 'foo'
            wp['obj2'] = 'bar'
            wp['bool1'] = wp['l1'] > 0
            wp['bool2'] = wp['l2'] > 0
            wp['int1'] = 1
            wp['int2'] = 2
            return wp.consolidate()

        p4d = _make_one_p4d()
        self.store.append('p4d_mixed', p4d)
        tm.assert_panel4d_equal(self.store.select('p4d_mixed'), p4d)
Example #31
0
    def test_sort_index(self):
        with catch_warnings(record=True):
            import random

            rlabels = list(self.panel4d.labels)
            ritems = list(self.panel4d.items)
            rmajor = list(self.panel4d.major_axis)
            rminor = list(self.panel4d.minor_axis)
            random.shuffle(rlabels)
            random.shuffle(ritems)
            random.shuffle(rmajor)
            random.shuffle(rminor)

            random_order = self.panel4d.reindex(labels=rlabels)
            sorted_panel4d = random_order.sort_index(axis=0)
            assert_panel4d_equal(sorted_panel4d, self.panel4d)
Example #32
0
    def test_sort_index(self):
        with tm.assert_produces_warning(FutureWarning, check_stacklevel=False):
            import random

            rlabels = list(self.panel4d.labels)
            ritems = list(self.panel4d.items)
            rmajor = list(self.panel4d.major_axis)
            rminor = list(self.panel4d.minor_axis)
            random.shuffle(rlabels)
            random.shuffle(ritems)
            random.shuffle(rmajor)
            random.shuffle(rminor)

            random_order = self.panel4d.reindex(labels=rlabels)
            sorted_panel4d = random_order.sort_index(axis=0)
            assert_panel4d_equal(sorted_panel4d, self.panel4d)
Example #33
0
class TestPanel4D(Generic):
    _typ = Panel4D
    _comparator = lambda self, x, y: assert_panel4d_equal(x, y, by_blocks=True)

    def test_sample(self):
        pytest.skip("sample on Panel4D")

    def test_to_xarray(self):

        tm._skip_if_no_xarray()
        from xarray import DataArray

        with catch_warnings(record=True):
            p = tm.makePanel4D()

            result = p.to_xarray()
            assert isinstance(result, DataArray)
            assert len(result.coords) == 4
            assert_almost_equal(list(result.coords.keys()),
                                ['labels', 'items', 'major_axis',
                                 'minor_axis'])
            assert len(result.dims) == 4

            # non-convertible
            pytest.raises(ValueError, lambda: result.to_pandas())
Example #34
0
    def test_abs(self):

        with catch_warnings(record=True):
            result = self.panel4d.abs()
            expected = np.abs(self.panel4d)
            tm.assert_panel4d_equal(result, expected)

            p = self.panel4d['l1']
            result = p.abs()
            expected = np.abs(p)
            tm.assert_panel_equal(result, expected)

            df = p['ItemA']
            result = df.abs()
            expected = np.abs(df)
            assert_frame_equal(result, expected)
Example #35
0
    def test_update(self):

        p4d = Panel4D([[[[1.5, np.nan, 3.], [1.5, np.nan, 3.],
                         [1.5, np.nan, 3.], [1.5, np.nan, 3.]],
                        [[1.5, np.nan, 3.], [1.5, np.nan, 3.],
                         [1.5, np.nan, 3.], [1.5, np.nan, 3.]]]])

        other = Panel4D([[[[3.6, 2., np.nan]], [[np.nan, np.nan, 7]]]])

        p4d.update(other)

        expected = Panel4D([[[[3.6, 2, 3.], [1.5, np.nan, 3.],
                              [1.5, np.nan, 3.], [1.5, np.nan, 3.]],
                             [[1.5, np.nan, 7], [1.5, np.nan, 3.],
                              [1.5, np.nan, 3.], [1.5, np.nan, 3.]]]])

        assert_panel4d_equal(p4d, expected)
Example #36
0
    def test_update(self):
        with catch_warnings(record=True):
            p4d = Panel4D([[[[1.5, np.nan, 3.], [1.5, np.nan, 3.],
                             [1.5, np.nan, 3.], [1.5, np.nan, 3.]],
                            [[1.5, np.nan, 3.], [1.5, np.nan, 3.],
                             [1.5, np.nan, 3.], [1.5, np.nan, 3.]]]])

            other = Panel4D([[[[3.6, 2., np.nan]], [[np.nan, np.nan, 7]]]])

            p4d.update(other)

            expected = Panel4D([[[[3.6, 2, 3.], [1.5, np.nan, 3.],
                                  [1.5, np.nan, 3.], [1.5, np.nan, 3.]],
                                 [[1.5, np.nan, 7], [1.5, np.nan, 3.],
                                  [1.5, np.nan, 3.], [1.5, np.nan, 3.]]]])

            tm.assert_panel4d_equal(p4d, expected)
Example #37
0
    def test_isna_isnull(self, isna_f):
        assert not isna_f(1.)
        assert isna_f(None)
        assert isna_f(np.NaN)
        assert float('nan')
        assert not isna_f(np.inf)
        assert not isna_f(-np.inf)

        # series
        for s in [
                tm.makeFloatSeries(),
                tm.makeStringSeries(),
                tm.makeObjectSeries(),
                tm.makeTimeSeries(),
                tm.makePeriodSeries()
        ]:
            assert isinstance(isna_f(s), Series)

        # frame
        for df in [
                tm.makeTimeDataFrame(),
                tm.makePeriodFrame(),
                tm.makeMixedDataFrame()
        ]:
            result = isna_f(df)
            expected = df.apply(isna_f)
            tm.assert_frame_equal(result, expected)

        # panel
        with catch_warnings(record=True):
            for p in [
                    tm.makePanel(),
                    tm.makePeriodPanel(),
                    tm.add_nans(tm.makePanel())
            ]:
                result = isna_f(p)
                expected = p.apply(isna_f)
                tm.assert_panel_equal(result, expected)

        # panel 4d
        with catch_warnings(record=True):
            for p in [tm.makePanel4D(), tm.add_nans_panel4d(tm.makePanel4D())]:
                result = isna_f(p)
                expected = p.apply(isna_f)
                tm.assert_panel4d_equal(result, expected)
Example #38
0
    def test_isnull(self):
        self.assertFalse(isnull(1.))
        self.assertTrue(isnull(None))
        self.assertTrue(isnull(np.NaN))
        self.assertTrue(float('nan'))
        self.assertFalse(isnull(np.inf))
        self.assertFalse(isnull(-np.inf))

        # series
        for s in [
                tm.makeFloatSeries(),
                tm.makeStringSeries(),
                tm.makeObjectSeries(),
                tm.makeTimeSeries(),
                tm.makePeriodSeries()
        ]:
            self.assertIsInstance(isnull(s), Series)

        # frame
        for df in [
                tm.makeTimeDataFrame(),
                tm.makePeriodFrame(),
                tm.makeMixedDataFrame()
        ]:
            result = isnull(df)
            expected = df.apply(isnull)
            tm.assert_frame_equal(result, expected)

        # panel
        with catch_warnings(record=True):
            for p in [
                    tm.makePanel(),
                    tm.makePeriodPanel(),
                    tm.add_nans(tm.makePanel())
            ]:
                result = isnull(p)
                expected = p.apply(isnull)
                tm.assert_panel_equal(result, expected)

        # panel 4d
        with catch_warnings(record=True):
            for p in [tm.makePanel4D(), tm.add_nans_panel4d(tm.makePanel4D())]:
                result = isnull(p)
                expected = p.apply(isnull)
                tm.assert_panel4d_equal(result, expected)
Example #39
0
    def test_fillna(self):
        filled = self.panel4d.fillna(0)
        self.assert_(np.isfinite(filled.values).all())

        filled = self.panel4d.fillna(method='backfill')
        assert_panel_equal(filled['l1'],
                           self.panel4d['l1'].fillna(method='backfill'))

        panel4d = self.panel4d.copy()
        panel4d['str'] = 'foo'

        filled = panel4d.fillna(method='backfill')
        assert_panel_equal(filled['l1'],
                           panel4d['l1'].fillna(method='backfill'))

        empty = self.panel4d.reindex(labels=[])
        filled = empty.fillna(0)
        assert_panel4d_equal(filled, empty)
Example #40
0
    def test_update(self):

        with tm.assert_produces_warning(FutureWarning, check_stacklevel=False):
            p4d = Panel4D([[[[1.5, np.nan, 3.], [1.5, np.nan, 3.],
                             [1.5, np.nan, 3.], [1.5, np.nan, 3.]],
                            [[1.5, np.nan, 3.], [1.5, np.nan, 3.],
                             [1.5, np.nan, 3.], [1.5, np.nan, 3.]]]])

            other = Panel4D([[[[3.6, 2., np.nan]], [[np.nan, np.nan, 7]]]])

            p4d.update(other)

            expected = Panel4D([[[[3.6, 2, 3.], [1.5, np.nan, 3.],
                                  [1.5, np.nan, 3.], [1.5, np.nan, 3.]],
                                 [[1.5, np.nan, 7], [1.5, np.nan, 3.],
                                  [1.5, np.nan, 3.], [1.5, np.nan, 3.]]]])

            assert_panel4d_equal(p4d, expected)
Example #41
0
def test_isnull():
    assert not isnull(1.)
    assert isnull(None)
    assert isnull(np.NaN)
    assert not isnull(np.inf)
    assert not isnull(-np.inf)

    # series
    for s in [
            tm.makeFloatSeries(),
            tm.makeStringSeries(),
            tm.makeObjectSeries(),
            tm.makeTimeSeries(),
            tm.makePeriodSeries()
    ]:
        assert (isinstance(isnull(s), Series))

    # frame
    for df in [
            tm.makeTimeDataFrame(),
            tm.makePeriodFrame(),
            tm.makeMixedDataFrame()
    ]:
        result = isnull(df)
        expected = df.apply(isnull)
        tm.assert_frame_equal(result, expected)

    # panel
    for p in [
            tm.makePanel(),
            tm.makePeriodPanel(),
            tm.add_nans(tm.makePanel())
    ]:
        result = isnull(p)
        expected = p.apply(isnull)
        tm.assert_panel_equal(result, expected)

    # panel 4d
    for p in [tm.makePanel4D(), tm.add_nans_panel4d(tm.makePanel4D())]:
        result = isnull(p)
        expected = p.apply(isnull)
        tm.assert_panel4d_equal(result, expected)
Example #42
0
    def test_numpy_transpose(self):
        msg = "the 'axes' parameter is not supported"

        s = tm.makeFloatSeries()
        tm.assert_series_equal(np.transpose(s), s)
        tm.assert_raises_regex(ValueError, msg, np.transpose, s, axes=1)

        df = tm.makeTimeDataFrame()
        tm.assert_frame_equal(np.transpose(np.transpose(df)), df)
        tm.assert_raises_regex(ValueError, msg, np.transpose, df, axes=1)

        with catch_warnings(record=True):
            p = tm.makePanel()
            tm.assert_panel_equal(
                np.transpose(np.transpose(p, axes=(2, 0, 1)), axes=(1, 2, 0)),
                p)

        with catch_warnings(record=True):
            p4d = tm.makePanel4D()
            tm.assert_panel4d_equal(
                np.transpose(np.transpose(p4d, axes=(2, 0, 3, 1)),
                             axes=(1, 3, 0, 2)), p4d)
Example #43
0
    def test_take(self):
        indices = [1, 5, -2, 6, 3, -1]
        for s in [
                tm.makeFloatSeries(),
                tm.makeStringSeries(),
                tm.makeObjectSeries()
        ]:
            out = s.take(indices)
            expected = Series(data=s.values.take(indices),
                              index=s.index.take(indices),
                              dtype=s.dtype)
            tm.assert_series_equal(out, expected)
        for df in [tm.makeTimeDataFrame()]:
            out = df.take(indices)
            expected = DataFrame(data=df.values.take(indices, axis=0),
                                 index=df.index.take(indices),
                                 columns=df.columns)
            tm.assert_frame_equal(out, expected)

        indices = [-3, 2, 0, 1]
        with catch_warnings(record=True):
            for p in [tm.makePanel()]:
                out = p.take(indices)
                expected = Panel(data=p.values.take(indices, axis=0),
                                 items=p.items.take(indices),
                                 major_axis=p.major_axis,
                                 minor_axis=p.minor_axis)
                tm.assert_panel_equal(out, expected)

        with catch_warnings(record=True):
            for p4d in [tm.makePanel4D()]:
                out = p4d.take(indices)
                expected = Panel4D(data=p4d.values.take(indices, axis=0),
                                   labels=p4d.labels.take(indices),
                                   major_axis=p4d.major_axis,
                                   minor_axis=p4d.minor_axis,
                                   items=p4d.items)
                tm.assert_panel4d_equal(out, expected)
Example #44
0
    def test_constructor_dict_mixed(self):
        data = dict((k, v.values) for k, v in self.panel4d.iteritems())
        result = Panel4D(data)
        exp_major = Index(np.arange(len(self.panel4d.major_axis)))
        self.assert_index_equal(result.major_axis, exp_major)

        result = Panel4D(data,
                         labels=self.panel4d.labels,
                         items=self.panel4d.items,
                         major_axis=self.panel4d.major_axis,
                         minor_axis=self.panel4d.minor_axis)
        assert_panel4d_equal(result, self.panel4d)

        data['l2'] = self.panel4d['l2']
        result = Panel4D(data)
        assert_panel4d_equal(result, self.panel4d)

        # corner, blow up
        data['l2'] = data['l2']['ItemB']
        self.assertRaises(Exception, Panel4D, data)

        data['l2'] = self.panel4d['l2'].values[:, :, :-1]
        self.assertRaises(Exception, Panel4D, data)
Example #45
0
    def test_constructor(self):
        # with BlockManager
        panel4d = Panel4D(self.panel4d._data)
        self.assert_(panel4d._data is self.panel4d._data)

        panel4d = Panel4D(self.panel4d._data, copy=True)
        self.assert_(panel4d._data is not self.panel4d._data)
        assert_panel4d_equal(panel4d, self.panel4d)

        # strings handled prop
        #panel4d = Panel4D([[['foo', 'foo', 'foo',],
        #                 ['foo', 'foo', 'foo']]])
        #self.assert_(wp.values.dtype == np.object_)

        vals = self.panel4d.values

        # no copy
        panel4d = Panel4D(vals)
        self.assert_(panel4d.values is vals)

        # copy
        panel4d = Panel4D(vals, copy=True)
        self.assert_(panel4d.values is not vals)
Example #46
0
    def test_transpose(self):
        msg = (r"transpose\(\) got multiple values for "
               r"keyword argument 'axes'")
        for s in [
                tm.makeFloatSeries(),
                tm.makeStringSeries(),
                tm.makeObjectSeries()
        ]:
            # calls implementation in pandas/core/base.py
            tm.assert_series_equal(s.transpose(), s)
        for df in [tm.makeTimeDataFrame()]:
            tm.assert_frame_equal(df.transpose().transpose(), df)

        with catch_warnings(record=True):
            for p in [tm.makePanel()]:
                tm.assert_panel_equal(
                    p.transpose(2, 0, 1).transpose(1, 2, 0), p)
                tm.assert_raises_regex(TypeError,
                                       msg,
                                       p.transpose,
                                       2,
                                       0,
                                       1,
                                       axes=(2, 0, 1))

        with catch_warnings(record=True):
            for p4d in [tm.makePanel4D()]:
                tm.assert_panel4d_equal(
                    p4d.transpose(2, 0, 3, 1).transpose(1, 3, 0, 2), p4d)
                tm.assert_raises_regex(TypeError,
                                       msg,
                                       p4d.transpose,
                                       2,
                                       0,
                                       3,
                                       1,
                                       axes=(2, 0, 3, 1))
Example #47
0
    def test_swapaxes(self):
        result = self.panel4d.swapaxes('labels', 'items')
        self.assertIs(result.items, self.panel4d.labels)

        result = self.panel4d.swapaxes('labels', 'minor')
        self.assertIs(result.labels, self.panel4d.minor_axis)

        result = self.panel4d.swapaxes('items', 'minor')
        self.assertIs(result.items, self.panel4d.minor_axis)

        result = self.panel4d.swapaxes('items', 'major')
        self.assertIs(result.items, self.panel4d.major_axis)

        result = self.panel4d.swapaxes('major', 'minor')
        self.assertIs(result.major_axis, self.panel4d.minor_axis)

        # this should also work
        result = self.panel4d.swapaxes(0, 1)
        self.assertIs(result.labels, self.panel4d.items)

        # this works, but return a copy
        result = self.panel4d.swapaxes('items', 'items')
        assert_panel4d_equal(self.panel4d, result)
        self.assertNotEqual(id(self.panel4d), id(result))
Example #48
0
    def test_constructor_resize(self):
        data  = self.panel4d._data
        labels= self.panel4d.labels[:-1]
        items = self.panel4d.items[:-1]
        major = self.panel4d.major_axis[:-1]
        minor = self.panel4d.minor_axis[:-1]

        result = Panel4D(data, labels=labels, items=items, major_axis=major, minor_axis=minor)
        expected = self.panel4d.reindex(labels=labels, items=items, major=major, minor=minor)
        assert_panel4d_equal(result, expected)

        result = Panel4D(data, items=items, major_axis=major)
        expected = self.panel4d.reindex(items=items, major=major)
        assert_panel4d_equal(result, expected)

        result = Panel4D(data, items=items)
        expected = self.panel4d.reindex(items=items)
        assert_panel4d_equal(result, expected)

        result = Panel4D(data, minor_axis=minor)
        expected = self.panel4d.reindex(minor=minor)
        assert_panel4d_equal(result, expected)
Example #49
0
    def test_constructor(self):
        # with BlockManager
        panel4d = Panel4D(self.panel4d._data)
        self.assertIs(panel4d._data, self.panel4d._data)

        panel4d = Panel4D(self.panel4d._data, copy=True)
        self.assertIsNot(panel4d._data, self.panel4d._data)
        assert_panel4d_equal(panel4d, self.panel4d)

        # strings handled prop
        # panel4d = Panel4D([[['foo', 'foo', 'foo',],
        #                 ['foo', 'foo', 'foo']]])
        # self.assertEqual(wp.values.dtype, np.object_)

        vals = self.panel4d.values

        # no copy
        panel4d = Panel4D(vals)
        self.assertIs(panel4d.values, vals)

        # copy
        panel4d = Panel4D(vals, copy=True)
        self.assertIsNot(panel4d.values, vals)

        # GH #8285, test when scalar data is used to construct a Panel4D
        # if dtype is not passed, it should be inferred
        value_and_dtype = [(1, 'int64'), (3.14, 'float64'),
                           ('foo', np.object_)]
        for (val, dtype) in value_and_dtype:
            panel4d = Panel4D(val,
                              labels=range(2),
                              items=range(3),
                              major_axis=range(4),
                              minor_axis=range(5))
            vals = np.empty((2, 3, 4, 5), dtype=dtype)
            vals.fill(val)
            assert_panel4d_equal(panel4d, Panel4D(vals, dtype=dtype))

        # test the case when dtype is passed
        panel4d = Panel4D(1,
                          labels=range(2),
                          items=range(3),
                          major_axis=range(4),
                          minor_axis=range(5),
                          dtype='float32')
        vals = np.empty((2, 3, 4, 5), dtype='float32')
        vals.fill(1)
        assert_panel4d_equal(panel4d, Panel4D(vals, dtype='float32'))
Example #50
0
    def test_constructor(self):

        with tm.assert_produces_warning(FutureWarning, check_stacklevel=False):
            panel4d = Panel4D(self.panel4d._data)
            self.assertIs(panel4d._data, self.panel4d._data)

            panel4d = Panel4D(self.panel4d._data, copy=True)
            self.assertIsNot(panel4d._data, self.panel4d._data)
            assert_panel4d_equal(panel4d, self.panel4d)

            vals = self.panel4d.values

            # no copy
            panel4d = Panel4D(vals)
            self.assertIs(panel4d.values, vals)

            # copy
            panel4d = Panel4D(vals, copy=True)
            self.assertIsNot(panel4d.values, vals)

            # GH #8285, test when scalar data is used to construct a Panel4D
            # if dtype is not passed, it should be inferred
            value_and_dtype = [(1, 'int64'), (3.14, 'float64'),
                               ('foo', np.object_)]
            for (val, dtype) in value_and_dtype:
                panel4d = Panel4D(val,
                                  labels=range(2),
                                  items=range(3),
                                  major_axis=range(4),
                                  minor_axis=range(5))
                vals = np.empty((2, 3, 4, 5), dtype=dtype)
                vals.fill(val)
                expected = Panel4D(vals, dtype=dtype)
                assert_panel4d_equal(panel4d, expected)

            # test the case when dtype is passed
            panel4d = Panel4D(1,
                              labels=range(2),
                              items=range(3),
                              major_axis=range(4),
                              minor_axis=range(5),
                              dtype='float32')
            vals = np.empty((2, 3, 4, 5), dtype='float32')
            vals.fill(1)

            expected = Panel4D(vals, dtype='float32')
            assert_panel4d_equal(panel4d, expected)
Example #51
0
    def test_constructor(self):

        with catch_warnings(record=True):
            panel4d = Panel4D(self.panel4d._data)
            assert panel4d._data is self.panel4d._data

            panel4d = Panel4D(self.panel4d._data, copy=True)
            assert panel4d._data is not self.panel4d._data
            tm.assert_panel4d_equal(panel4d, self.panel4d)

            vals = self.panel4d.values

            # no copy
            panel4d = Panel4D(vals)
            assert panel4d.values is vals

            # copy
            panel4d = Panel4D(vals, copy=True)
            assert panel4d.values is not vals

            # GH #8285, test when scalar data is used to construct a Panel4D
            # if dtype is not passed, it should be inferred
            value_and_dtype = [(1, 'int64'), (3.14, 'float64'),
                               ('foo', np.object_)]
            for (val, dtype) in value_and_dtype:
                panel4d = Panel4D(val,
                                  labels=range(2),
                                  items=range(3),
                                  major_axis=range(4),
                                  minor_axis=range(5))
                vals = np.empty((2, 3, 4, 5), dtype=dtype)
                vals.fill(val)
                expected = Panel4D(vals, dtype=dtype)
                tm.assert_panel4d_equal(panel4d, expected)

            # test the case when dtype is passed
            panel4d = Panel4D(1,
                              labels=range(2),
                              items=range(3),
                              major_axis=range(4),
                              minor_axis=range(5),
                              dtype='float32')
            vals = np.empty((2, 3, 4, 5), dtype='float32')
            vals.fill(1)

            expected = Panel4D(vals, dtype='float32')
            tm.assert_panel4d_equal(panel4d, expected)
Example #52
0
    def test_terms(self):

        wp = tm.makePanel()
        p4d = tm.makePanel4D()
        self.store.put('wp', wp, table=True)
        self.store.put('p4d', p4d, table=True)

        # some invalid terms
        terms = [
            ['minor', ['A', 'B']],
            ['index', ['20121114']],
            ['index', ['20121114', '20121114']],
        ]
        for t in terms:
            self.assertRaises(Exception, self.store.select, 'wp', t)

        self.assertRaises(Exception, Term.__init__)
        self.assertRaises(Exception, Term.__init__, 'blah')
        self.assertRaises(Exception, Term.__init__, 'index')
        self.assertRaises(Exception, Term.__init__, 'index', '==')
        self.assertRaises(Exception, Term.__init__, 'index', '>', 5)

        # panel
        result = self.store.select(
            'wp',
            [Term('major_axis<20000108'),
             Term('minor_axis', '=', ['A', 'B'])])
        expected = wp.truncate(after='20000108').reindex(minor=['A', 'B'])
        tm.assert_panel_equal(result, expected)

        # p4d
        result = self.store.select('p4d', [
            Term('major_axis<20000108'),
            Term('minor_axis', '=', ['A', 'B']),
            Term('items', '=', ['ItemA', 'ItemB'])
        ])
        expected = p4d.truncate(after='20000108').reindex(
            minor=['A', 'B'], items=['ItemA', 'ItemB'])
        tm.assert_panel4d_equal(result, expected)

        # valid terms
        terms = [
            dict(field='major_axis', op='>', value='20121114'),
            ('major_axis', '20121114'),
            ('major_axis', '>', '20121114'),
            (('major_axis', ['20121114', '20121114']), ),
            ('major_axis', datetime(2012, 11, 14)),
            'major_axis>20121114',
            'major_axis>20121114',
            'major_axis>20121114',
            (('minor_axis', ['A', 'B']), ),
            (('minor_axis', ['A', 'B']), ),
            ((('minor_axis', ['A', 'B']), ), ),
            (('items', ['ItemA', 'ItemB']), ),
            ('items=ItemA'),
        ]

        for t in terms:
            self.store.select('wp', t)
            self.store.select('p4d', t)

        # valid for p4d only
        terms = [
            (('labels', '=', ['l1', 'l2']), ),
            Term('labels', '=', ['l1', 'l2']),
        ]

        for t in terms:
            self.store.select('p4d', t)
Example #53
0
    def test_getitem_fancy_labels(self):
        with tm.assert_produces_warning(FutureWarning, check_stacklevel=False):
            panel4d = self.panel4d

            labels = panel4d.labels[[1, 0]]
            items = panel4d.items[[1, 0]]
            dates = panel4d.major_axis[::2]
            cols = ['D', 'C', 'F']

            # all 4 specified
            assert_panel4d_equal(panel4d.loc[labels, items, dates, cols],
                                 panel4d.reindex(labels=labels, items=items,
                                                 major=dates, minor=cols))

            # 3 specified
            assert_panel4d_equal(panel4d.loc[:, items, dates, cols],
                                 panel4d.reindex(items=items, major=dates,
                                                 minor=cols))

            # 2 specified
            assert_panel4d_equal(panel4d.loc[:, :, dates, cols],
                                 panel4d.reindex(major=dates, minor=cols))

            assert_panel4d_equal(panel4d.loc[:, items, :, cols],
                                 panel4d.reindex(items=items, minor=cols))

            assert_panel4d_equal(panel4d.loc[:, items, dates, :],
                                 panel4d.reindex(items=items, major=dates))

            # only 1
            assert_panel4d_equal(panel4d.loc[:, items, :, :],
                                 panel4d.reindex(items=items))

            assert_panel4d_equal(panel4d.loc[:, :, dates, :],
                                 panel4d.reindex(major=dates))

            assert_panel4d_equal(panel4d.loc[:, :, :, cols],
                                 panel4d.reindex(minor=cols))
Example #54
0
    def test_ndim_indexables(self):
        """ test using ndim tables in new ways"""

        p4d = tm.makePanel4D()

        def check_indexers(key, indexers):
            for i, idx in enumerate(indexers):
                self.assert_(
                    getattr(
                        getattr(self.store.root, key).table.description,
                        idx)._v_pos == i)

        # append then change (will take existing schema)
        indexers = ['items', 'major_axis', 'minor_axis']

        self.store.remove('p4d')
        self.store.append('p4d', p4d.ix[:, :, :10, :], axes=indexers)
        self.store.append('p4d', p4d.ix[:, :, 10:, :])
        tm.assert_panel4d_equal(self.store.select('p4d'), p4d)
        check_indexers('p4d', indexers)

        # same as above, but try to append with differnt axes
        self.store.remove('p4d')
        self.store.append('p4d', p4d.ix[:, :, :10, :], axes=indexers)
        self.store.append('p4d',
                          p4d.ix[:, :, 10:, :],
                          axes=['labels', 'items', 'major_axis'])
        tm.assert_panel4d_equal(self.store.select('p4d'), p4d)
        check_indexers('p4d', indexers)

        # pass incorrect number of axes
        self.store.remove('p4d')
        self.assertRaises(Exception,
                          self.store.append,
                          'p4d',
                          p4d.ix[:, :, :10, :],
                          axes=['major_axis', 'minor_axis'])

        # different than default indexables #1
        indexers = ['labels', 'major_axis', 'minor_axis']
        self.store.remove('p4d')
        self.store.append('p4d', p4d.ix[:, :, :10, :], axes=indexers)
        self.store.append('p4d', p4d.ix[:, :, 10:, :])
        tm.assert_panel4d_equal(self.store['p4d'], p4d)
        check_indexers('p4d', indexers)

        # different than default indexables #2
        indexers = ['major_axis', 'labels', 'minor_axis']
        self.store.remove('p4d')
        self.store.append('p4d', p4d.ix[:, :, :10, :], axes=indexers)
        self.store.append('p4d', p4d.ix[:, :, 10:, :])
        tm.assert_panel4d_equal(self.store['p4d'], p4d)
        check_indexers('p4d', indexers)

        # partial selection
        result = self.store.select('p4d', ['labels=l1'])
        expected = p4d.reindex(labels=['l1'])
        tm.assert_panel4d_equal(result, expected)

        # partial selection2
        result = self.store.select(
            'p4d',
            [Term('labels=l1'),
             Term('items=ItemA'),
             Term('minor_axis=B')])
        expected = p4d.reindex(labels=['l1'],
                               items=['ItemA'],
                               minor_axis=['B'])
        tm.assert_panel4d_equal(result, expected)

        # non-existant partial selection
        result = self.store.select(
            'p4d',
            [Term('labels=l1'),
             Term('items=Item1'),
             Term('minor_axis=B')])
        expected = p4d.reindex(labels=['l1'], items=[], minor_axis=['B'])
        tm.assert_panel4d_equal(result, expected)
Example #55
0
    def test_append(self):

        df = tm.makeTimeDataFrame()
        self.store.remove('df1')
        self.store.append('df1', df[:10])
        self.store.append('df1', df[10:])
        tm.assert_frame_equal(self.store['df1'], df)

        self.store.remove('df2')
        self.store.put('df2', df[:10], table=True)
        self.store.append('df2', df[10:])
        tm.assert_frame_equal(self.store['df2'], df)

        self.store.remove('df3')
        self.store.append('/df3', df[:10])
        self.store.append('/df3', df[10:])
        tm.assert_frame_equal(self.store['df3'], df)

        # this is allowed by almost always don't want to do it
        warnings.filterwarnings('ignore', category=tables.NaturalNameWarning)
        self.store.remove('/df3 foo')
        self.store.append('/df3 foo', df[:10])
        self.store.append('/df3 foo', df[10:])
        tm.assert_frame_equal(self.store['df3 foo'], df)
        warnings.filterwarnings('always', category=tables.NaturalNameWarning)

        # panel
        wp = tm.makePanel()
        self.store.remove('wp1')
        self.store.append('wp1', wp.ix[:, :10, :])
        self.store.append('wp1', wp.ix[:, 10:, :])
        tm.assert_panel_equal(self.store['wp1'], wp)

        # ndim
        p4d = tm.makePanel4D()
        self.store.remove('p4d')
        self.store.append('p4d', p4d.ix[:, :, :10, :])
        self.store.append('p4d', p4d.ix[:, :, 10:, :])
        tm.assert_panel4d_equal(self.store['p4d'], p4d)

        # test using axis labels
        self.store.remove('p4d')
        self.store.append('p4d',
                          p4d.ix[:, :, :10, :],
                          axes=['items', 'major_axis', 'minor_axis'])
        self.store.append('p4d',
                          p4d.ix[:, :, 10:, :],
                          axes=['items', 'major_axis', 'minor_axis'])
        tm.assert_panel4d_equal(self.store['p4d'], p4d)

        # test using differnt number of items on each axis
        p4d2 = p4d.copy()
        p4d2['l4'] = p4d['l1']
        p4d2['l5'] = p4d['l1']
        self.store.remove('p4d2')
        self.store.append('p4d2',
                          p4d2,
                          axes=['items', 'major_axis', 'minor_axis'])
        tm.assert_panel4d_equal(self.store['p4d2'], p4d2)

        # test using differt order of items on the non-index axes
        self.store.remove('wp1')
        wp_append1 = wp.ix[:, :10, :]
        self.store.append('wp1', wp_append1)
        wp_append2 = wp.ix[:, 10:, :].reindex(items=wp.items[::-1])
        self.store.append('wp1', wp_append2)
        tm.assert_panel_equal(self.store['wp1'], wp)
Example #56
0
 def test_combinePanel4d(self):
     with catch_warnings(record=True):
         result = self.panel4d.add(self.panel4d)
         tm.assert_panel4d_equal(result, self.panel4d * 2)
Example #57
0
 def assert_panel4d_equal(cls, x, y):
     assert_panel4d_equal(x, y)
Example #58
0
    def test_getitem_fancy_labels(self):
        panel4d = self.panel4d

        labels = panel4d.labels[[1, 0]]
        items = panel4d.items[[1, 0]]
        dates = panel4d.major_axis[::2]
        cols = ['D', 'C', 'F']

        # all 4 specified
        assert_panel4d_equal(panel4d.ix[labels, items, dates, cols],
                             panel4d.reindex(labels=labels, items=items,
                                             major=dates, minor=cols))

        # 3 specified
        assert_panel4d_equal(panel4d.ix[:, items, dates, cols],
                             panel4d.reindex(items=items, major=dates,
                                             minor=cols))

        # 2 specified
        assert_panel4d_equal(panel4d.ix[:, :, dates, cols],
                             panel4d.reindex(major=dates, minor=cols))

        assert_panel4d_equal(panel4d.ix[:, items, :, cols],
                             panel4d.reindex(items=items, minor=cols))

        assert_panel4d_equal(panel4d.ix[:, items, dates, :],
                             panel4d.reindex(items=items, major=dates))

        # only 1
        assert_panel4d_equal(panel4d.ix[:, items, :, :],
                             panel4d.reindex(items=items))

        assert_panel4d_equal(panel4d.ix[:, :, dates, :],
                             panel4d.reindex(major=dates))

        assert_panel4d_equal(panel4d.ix[:, :, :, cols],
                             panel4d.reindex(minor=cols))
Example #59
0
 def test_neg(self):
     with catch_warnings(record=True):
         tm.assert_panel4d_equal(-self.panel4d, self.panel4d * -1)
Example #60
0
    def test_getitem_fancy_labels(self):
        with catch_warnings(record=True):
            panel4d = self.panel4d

            labels = panel4d.labels[[1, 0]]
            items = panel4d.items[[1, 0]]
            dates = panel4d.major_axis[::2]
            cols = ['D', 'C', 'F']

            # all 4 specified
            tm.assert_panel4d_equal(
                panel4d.loc[labels, items, dates, cols],
                panel4d.reindex(labels=labels,
                                items=items,
                                major=dates,
                                minor=cols))

            # 3 specified
            tm.assert_panel4d_equal(
                panel4d.loc[:, items, dates, cols],
                panel4d.reindex(items=items, major=dates, minor=cols))

            # 2 specified
            tm.assert_panel4d_equal(panel4d.loc[:, :, dates, cols],
                                    panel4d.reindex(major=dates, minor=cols))

            tm.assert_panel4d_equal(panel4d.loc[:, items, :, cols],
                                    panel4d.reindex(items=items, minor=cols))

            tm.assert_panel4d_equal(panel4d.loc[:, items, dates, :],
                                    panel4d.reindex(items=items, major=dates))

            # only 1
            tm.assert_panel4d_equal(panel4d.loc[:, items, :, :],
                                    panel4d.reindex(items=items))

            tm.assert_panel4d_equal(panel4d.loc[:, :, dates, :],
                                    panel4d.reindex(major=dates))

            tm.assert_panel4d_equal(panel4d.loc[:, :, :, cols],
                                    panel4d.reindex(minor=cols))