Пример #1
0
    def test_constructor(self):
        # with BlockManager
        wp = Panel(self.panel._data)
        self.assert_(wp._data is self.panel._data)

        wp = Panel(self.panel._data, copy=True)
        self.assert_(wp._data is not self.panel._data)
        assert_panel_equal(wp, self.panel)

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

        vals = self.panel.values

        # no copy
        wp = Panel(vals)
        self.assert_(wp.values is vals)

        # copy
        wp = Panel(vals, copy=True)
        self.assert_(wp.values is not vals)
 def __call__(self, forecasts):
     items = list(range(len(forecasts)))
     means = [forecast.mean for forecast in forecasts]
     means = zip(items, means)
     stds = [forecast.sd for forecast in forecasts]
     stds = zip(items, stds)
     means = Panel({item: frame for item, frame in means})
     stds = Panel({item: frame for item, frame in stds})
     return MeanForecast(means.mean(axis="items"), stds.mean(axis="items"))
Пример #3
0
    def test_constructor_cast(self):
        casted = Panel(self.panel._data, dtype=int)
        casted2 = Panel(self.panel.values, dtype=int)

        exp_values = self.panel.values.astype(int)
        assert_almost_equal(casted.values, exp_values)
        assert_almost_equal(casted2.values, exp_values)

        # can't cast
        data = [[['foo', 'bar', 'baz']]]
        self.assertRaises(ValueError, Panel, data, dtype=float)
Пример #4
0
    def test_constructor_error_msgs(self):
        msg = (r"Shape of passed values is \(3, 4, 5\), "
               r"indices imply \(4, 5, 5\)")
        with pytest.raises(ValueError, match=msg):
            Panel(np.random.randn(3, 4, 5), lrange(4), lrange(5), lrange(5))

        msg = (r"Shape of passed values is \(3, 4, 5\), "
               r"indices imply \(5, 4, 5\)")
        with pytest.raises(ValueError, match=msg):
            Panel(np.random.randn(3, 4, 5), lrange(5), lrange(4), lrange(5))

        msg = (r"Shape of passed values is \(3, 4, 5\), "
               r"indices imply \(5, 5, 4\)")
        with pytest.raises(ValueError, match=msg):
            Panel(np.random.randn(3, 4, 5), lrange(5), lrange(5), lrange(4))
Пример #5
0
    def test_constructor_dtypes(self):
        # GH #797

        def _check_dtype(panel, dtype):
            for i in panel.items:
                assert panel[i].values.dtype.name == dtype

        # only nan holding types allowed here
        for dtype in ['float64', 'float32', 'object']:
            panel = Panel(items=lrange(2),
                          major_axis=lrange(10),
                          minor_axis=lrange(5),
                          dtype=dtype)
            _check_dtype(panel, dtype)

        for dtype in ['float64', 'float32', 'int64', 'int32', 'object']:
            panel = Panel(np.array(np.random.randn(2, 10, 5), dtype=dtype),
                          items=lrange(2),
                          major_axis=lrange(10),
                          minor_axis=lrange(5),
                          dtype=dtype)
            _check_dtype(panel, dtype)

        for dtype in ['float64', 'float32', 'int64', 'int32', 'object']:
            panel = Panel(np.array(np.random.randn(2, 10, 5), dtype='O'),
                          items=lrange(2),
                          major_axis=lrange(10),
                          minor_axis=lrange(5),
                          dtype=dtype)
            _check_dtype(panel, dtype)

        for dtype in ['float64', 'float32', 'int64', 'int32', 'object']:
            panel = Panel(np.random.randn(2, 10, 5),
                          items=lrange(2),
                          major_axis=lrange(10),
                          minor_axis=lrange(5),
                          dtype=dtype)
            _check_dtype(panel, dtype)

        for dtype in ['float64', 'float32', 'int64', 'int32', 'object']:
            df1 = DataFrame(np.random.randn(2, 5),
                            index=lrange(2),
                            columns=lrange(5))
            df2 = DataFrame(np.random.randn(2, 5),
                            index=lrange(2),
                            columns=lrange(5))
            panel = Panel.from_dict({'a': df1, 'b': df2}, dtype=dtype)
            _check_dtype(panel, dtype)
Пример #6
0
    def test_wls_panel(self):
        y = tm.makeTimeDataFrame()
        x = Panel({'x1': tm.makeTimeDataFrame(),
                   'x2': tm.makeTimeDataFrame()})

        y.iloc[[1, 7], y.columns.get_loc('A')] = np.nan
        y.iloc[[6, 15], y.columns.get_loc('B')] = np.nan
        y.iloc[[3, 20], y.columns.get_loc('C')] = np.nan
        y.iloc[[5, 11], y.columns.get_loc('D')] = np.nan

        stack_y = y.stack()
        stack_x = DataFrame(dict((k, v.stack())
                                 for k, v in x.iteritems()))

        weights = x.std('items')
        stack_weights = weights.stack()

        stack_y.index = stack_y.index._tuple_index
        stack_x.index = stack_x.index._tuple_index
        stack_weights.index = stack_weights.index._tuple_index

        with tm.assert_produces_warning(FutureWarning, check_stacklevel=False):
            result = ols(y=y, x=x, weights=1 / weights)
        with tm.assert_produces_warning(FutureWarning, check_stacklevel=False):
            expected = ols(y=stack_y, x=stack_x, weights=1 / stack_weights)

        assert_almost_equal(result.beta, expected.beta)

        for attr in ['resid', 'y_fitted']:
            rvals = getattr(result, attr).stack().values
            evals = getattr(expected, attr).values
            assert_almost_equal(rvals, evals)
Пример #7
0
    def test_ix_frame_align(self):
        # GH3830, panel assignent by values/frame
        for dtype in ['float64', 'int64']:

            panel = Panel(np.arange(40).reshape((2, 4, 5)),
                          items=['a1', 'a2'],
                          dtype=dtype)
            df1 = panel.iloc[0]
            df2 = panel.iloc[1]

            tm.assert_frame_equal(panel.loc['a1'], df1)
            tm.assert_frame_equal(panel.loc['a2'], df2)

            # Assignment by Value Passes for 'a2'
            panel.loc['a2'] = df1.values
            tm.assert_frame_equal(panel.loc['a1'], df1)
            tm.assert_frame_equal(panel.loc['a2'], df1)

            # Assignment by DataFrame Ok w/o loc 'a2'
            panel['a2'] = df2
            tm.assert_frame_equal(panel.loc['a1'], df1)
            tm.assert_frame_equal(panel.loc['a2'], df2)

            # Assignment by DataFrame Fails for 'a2'
            panel.loc['a2'] = df2
            tm.assert_frame_equal(panel.loc['a1'], df1)
            tm.assert_frame_equal(panel.loc['a2'], df2)
Пример #8
0
    def test_setitem(self):
        # LongPanel with one item
        # lp = self.panel.filter(['ItemA', 'ItemB']).to_frame()
        # self.assertRaises(Exception, self.panel.__setitem__,
        #                  'ItemE', lp)

        # Panel
        p = Panel(dict(
            ItemA=self.panel4d['l1']['ItemA'][2:].filter(items=['A', 'B'])))
        self.panel4d['l4'] = p
        self.panel4d['l5'] = p

        p2 = self.panel4d['l4']

        assert_panel_equal(p, p2.reindex(items=p.items,
                                         major_axis=p.major_axis,
                                         minor_axis=p.minor_axis))

        # scalar
        self.panel4d['lG'] = 1
        self.panel4d['lE'] = True
        self.assertEqual(self.panel4d['lG'].values.dtype, np.int64)
        self.assertEqual(self.panel4d['lE'].values.dtype, np.bool_)

        # object dtype
        self.panel4d['lQ'] = 'foo'
        self.assertEqual(self.panel4d['lQ'].values.dtype, np.object_)

        # boolean dtype
        self.panel4d['lP'] = self.panel4d['l1'] > 0
        self.assertEqual(self.panel4d['lP'].values.dtype, np.bool_)
Пример #9
0
 def test_setitem(self):
     # bad shape
     p = Panel(np.random.randn(4, 3, 2))
     msg = (r"shape of value must be \(3, 2\), "
            r"shape of given object was \(4, 2\)")
     with pytest.raises(ValueError, match=msg):
         p[0] = np.random.randn(4, 2)
Пример #10
0
    def test_setitem(self):
        with catch_warnings(record=True):

            # Panel
            p = Panel(
                dict(ItemA=self.panel4d['l1']['ItemA'][2:].filter(
                    items=['A', 'B'])))
            self.panel4d['l4'] = p
            self.panel4d['l5'] = p

            p2 = self.panel4d['l4']

            tm.assert_panel_equal(
                p,
                p2.reindex(items=p.items,
                           major_axis=p.major_axis,
                           minor_axis=p.minor_axis))

            # scalar
            self.panel4d['lG'] = 1
            self.panel4d['lE'] = True
            assert self.panel4d['lG'].values.dtype == np.int64
            assert self.panel4d['lE'].values.dtype == np.bool_

            # object dtype
            self.panel4d['lQ'] = 'foo'
            assert self.panel4d['lQ'].values.dtype == np.object_

            # boolean dtype
            self.panel4d['lP'] = self.panel4d['l1'] > 0
            assert self.panel4d['lP'].values.dtype == np.bool_
Пример #11
0
 def test_constructor_observe_dtype(self):
     # GH #411
     panel = Panel(items=lrange(3),
                   major_axis=lrange(3),
                   minor_axis=lrange(3),
                   dtype='O')
     self.assert_(panel.values.dtype == np.object_)
Пример #12
0
    def test_delitem_and_pop(self):
        expected = self.panel['ItemA']
        result = self.panel.pop('ItemA')
        assert_frame_equal(expected, result)
        self.assert_('ItemA' not in self.panel.items)

        del self.panel['ItemB']
        self.assert_('ItemB' not in self.panel.items)
        self.assertRaises(Exception, self.panel.__delitem__, 'ItemB')

        values = np.empty((3, 3, 3))
        values[0] = 0
        values[1] = 1
        values[2] = 2

        panel = Panel(values, range(3), range(3), range(3))

        # did we delete the right row?

        panelc = panel.copy()
        del panelc[0]
        assert_frame_equal(panelc[1], panel[1])
        assert_frame_equal(panelc[2], panel[2])

        panelc = panel.copy()
        del panelc[1]
        assert_frame_equal(panelc[0], panel[0])
        assert_frame_equal(panelc[2], panel[2])

        panelc = panel.copy()
        del panelc[2]
        assert_frame_equal(panelc[1], panel[1])
        assert_frame_equal(panelc[0], panel[0])
Пример #13
0
    def test_delitem_and_pop(self):

        values = np.empty((3, 3, 3))
        values[0] = 0
        values[1] = 1
        values[2] = 2

        panel = Panel(values, lrange(3), lrange(3), lrange(3))

        # did we delete the right row?

        panelc = panel.copy()
        del panelc[0]
        tm.assert_frame_equal(panelc[1], panel[1])
        tm.assert_frame_equal(panelc[2], panel[2])

        panelc = panel.copy()
        del panelc[1]
        tm.assert_frame_equal(panelc[0], panel[0])
        tm.assert_frame_equal(panelc[2], panel[2])

        panelc = panel.copy()
        del panelc[2]
        tm.assert_frame_equal(panelc[1], panel[1])
        tm.assert_frame_equal(panelc[0], panel[0])
Пример #14
0
    def test_wls_panel(self):
        y = tm.makeTimeDataFrame()
        x = Panel({'x1' : tm.makeTimeDataFrame(),
                   'x2' : tm.makeTimeDataFrame()})

        y.ix[[1, 7], 'A'] = np.nan
        y.ix[[6, 15], 'B'] = np.nan
        y.ix[[3, 20], 'C'] = np.nan
        y.ix[[5, 11], 'D'] = np.nan

        stack_y = y.stack()
        stack_x = DataFrame(dict((k, v.stack())
                                  for k, v in x.iteritems()))

        weights = x.std('items')
        stack_weights = weights.stack()

        stack_y.index = stack_y.index.get_tuple_index()
        stack_x.index = stack_x.index.get_tuple_index()
        stack_weights.index = stack_weights.index.get_tuple_index()

        result = ols(y=y, x=x, weights=1/weights)
        expected = ols(y=stack_y, x=stack_x, weights=1/stack_weights)

        assert_almost_equal(result.beta, expected.beta)

        for attr in ['resid', 'y_fitted']:
            rvals = getattr(result, attr).stack().values
            evals = getattr(expected, attr).values
            assert_almost_equal(rvals, evals)
Пример #15
0
    def test_update_raise_on_overlap(self):
        pan = Panel([[[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.]]])

        with pytest.raises(ValueError, match='Data overlaps'):
            pan.update(pan, errors='raise')
Пример #16
0
    def test_ix_setitem_slice_dataframe(self):
        a = Panel(items=[1,2,3],major_axis=[11,22,33],minor_axis=[111,222,333])
        b = DataFrame(np.random.randn(2,3), index=[111,333],
                      columns=[1,2,3])

        a.ix[:, 22, [111, 333]] = b

        assert_frame_equal(a.ix[:, 22, [111, 333]], b)
Пример #17
0
    def to_dense(self):
        """
        Convert SparsePanel to (dense) Panel

        Returns
        -------
        dense : Panel
        """
        return Panel(self.values, self.items, self.major_axis, self.minor_axis)
Пример #18
0
    def test_plm_ctor(self):
        y = tm.makeTimeDataFrame()
        x = {'a': tm.makeTimeDataFrame(), 'b': tm.makeTimeDataFrame()}

        model = ols(y=y, x=x, intercept=False)
        model.summary

        model = ols(y=y, x=Panel(x))
        model.summary
Пример #19
0
    def test_ctor_orderedDict(self):
        keys = list(set(np.random.randint(
            0, 5000, 100)))[:50]  # unique random int  keys
        d = OrderedDict([(k, mkdf(10, 5)) for k in keys])
        p = Panel(d)
        assert list(p.items) == keys

        p = Panel.from_dict(d)
        assert list(p.items) == keys
Пример #20
0
 def forecast(self, h):
     """
     Returns the forecasts at 1, 2, ..., n timesteps in the future.
     """
     forecast = self._forecast_raw(h).T.swapaxes(1, 2)
     index = xrange(1, 1 + h)
     w = Panel(forecast, items=self._data.items, major_axis=index,
               minor_axis=self._data.minor_axis)
     return w
Пример #21
0
 def test_to_frame_multi_drop_level(self):
     idx = MultiIndex.from_tuples([(1, 'one'), (2, 'one'), (2, 'two')])
     df = DataFrame({'A': [np.nan, 1, 2]}, index=idx)
     wp = Panel({'i1': df, 'i2': df})
     result = wp.to_frame()
     exp_idx = MultiIndex.from_tuples([(2, 'one', 'A'), (2, 'two', 'A')],
                                      names=[None, None, 'minor'])
     expected = DataFrame({'i1': [1., 2], 'i2': [1., 2]}, index=exp_idx)
     assert_frame_equal(result, expected)
Пример #22
0
    def test_to_frame_multi_major(self):
        idx = MultiIndex.from_tuples([(1, 'one'), (1, 'two'), (2, 'one'),
                                      (2, 'two')])
        df = DataFrame([[1, 'a', 1], [2, 'b', 1], [3, 'c', 1], [4, 'd', 1]],
                       columns=['A', 'B', 'C'],
                       index=idx)
        wp = Panel({'i1': df, 'i2': df})
        expected_idx = MultiIndex.from_tuples([
            (1, 'one', 'A'), (1, 'one', 'B'), (1, 'one', 'C'), (1, 'two', 'A'),
            (1, 'two', 'B'), (1, 'two', 'C'), (2, 'one', 'A'), (2, 'one', 'B'),
            (2, 'one', 'C'), (2, 'two', 'A'), (2, 'two', 'B'), (2, 'two', 'C')
        ],
                                              names=[None, None, 'minor'])
        expected = DataFrame(
            {
                'i1': [1, 'a', 1, 2, 'b', 1, 3, 'c', 1, 4, 'd', 1],
                'i2': [1, 'a', 1, 2, 'b', 1, 3, 'c', 1, 4, 'd', 1]
            },
            index=expected_idx)
        result = wp.to_frame()
        assert_frame_equal(result, expected)

        wp.iloc[0, 0].iloc[0] = np.nan  # BUG on setting. GH #5773
        result = wp.to_frame()
        assert_frame_equal(result, expected[1:])

        idx = MultiIndex.from_tuples([(1, 'two'), (1, 'one'), (2, 'one'),
                                      (np.nan, 'two')])
        df = DataFrame([[1, 'a', 1], [2, 'b', 1], [3, 'c', 1], [4, 'd', 1]],
                       columns=['A', 'B', 'C'],
                       index=idx)
        wp = Panel({'i1': df, 'i2': df})
        ex_idx = MultiIndex.from_tuples([(1, 'two', 'A'), (1, 'two', 'B'),
                                         (1, 'two', 'C'), (1, 'one', 'A'),
                                         (1, 'one', 'B'), (1, 'one', 'C'),
                                         (2, 'one', 'A'), (2, 'one', 'B'),
                                         (2, 'one', 'C'), (np.nan, 'two', 'A'),
                                         (np.nan, 'two', 'B'),
                                         (np.nan, 'two', 'C')],
                                        names=[None, None, 'minor'])
        expected.index = ex_idx
        result = wp.to_frame()
        assert_frame_equal(result, expected)
Пример #23
0
 def test_raise_when_not_implemented(self):
     p = Panel(np.arange(3 * 4 * 5).reshape(3, 4, 5),
               items=['ItemA', 'ItemB', 'ItemC'],
               major_axis=date_range('20130101', periods=4),
               minor_axis=list('ABCDE'))
     d = p.sum(axis=1).iloc[0]
     ops = ['add', 'sub', 'mul', 'truediv', 'floordiv', 'div', 'mod', 'pow']
     for op in ops:
         with pytest.raises(NotImplementedError):
             getattr(p, op)(d, axis=0)
Пример #24
0
    def test_multiindex_blocks(self):
        ind = MultiIndex.from_tuples([('a', 1), ('a', 2), ('b', 1)],
                                     names=['first', 'second'])
        wp = Panel(self.panel._data)
        wp.items = ind
        f1 = wp['a']
        self.assert_((f1.items == [1, 2]).all())

        f1 = wp[('b', 1)]
        self.assert_((f1.columns == ['A', 'B', 'C', 'D']).all())
Пример #25
0
    def test_plm_ctor(self):
        y = tm.makeTimeDataFrame()
        x = {'a': tm.makeTimeDataFrame(), 'b': tm.makeTimeDataFrame()}

        with tm.assert_produces_warning(FutureWarning, check_stacklevel=False):
            model = ols(y=y, x=x, intercept=False)
        model.summary

        with tm.assert_produces_warning(FutureWarning, check_stacklevel=False):
            model = ols(y=y, x=Panel(x))
        model.summary
Пример #26
0
    def test_constructor_dict_mixed(self):
        data = dict((k, v.values) for k, v in self.panel.iterkv())
        result = Panel(data)
        exp_major = Index(np.arange(len(self.panel.major_axis)))
        self.assert_(result.major_axis.equals(exp_major))

        result = Panel(data, items=self.panel.items,
                       major_axis=self.panel.major_axis,
                       minor_axis=self.panel.minor_axis)
        assert_panel_equal(result, self.panel)

        data['ItemC'] = self.panel['ItemC']
        result = Panel(data)
        assert_panel_equal(result, self.panel)

        # corner, blow up
        data['ItemB'] = data['ItemB'][:-1]
        self.assertRaises(Exception, Panel, data)

        data['ItemB'] = self.panel['ItemB'].values[:, :-1]
        self.assertRaises(Exception, Panel, data)
Пример #27
0
    def test_constructor_resize(self):
        data = self.panel._data
        items = self.panel.items[:-1]
        major = self.panel.major_axis[:-1]
        minor = self.panel.minor_axis[:-1]

        result = Panel(data, items=items, major_axis=major, minor_axis=minor)
        expected = self.panel.reindex(items=items, major=major, minor=minor)
        assert_panel_equal(result, expected)

        result = Panel(data, items=items, major_axis=major)
        expected = self.panel.reindex(items=items, major=major)
        assert_panel_equal(result, expected)

        result = Panel(data, items=items)
        expected = self.panel.reindex(items=items)
        assert_panel_equal(result, expected)

        result = Panel(data, minor_axis=minor)
        expected = self.panel.reindex(minor=minor)
        assert_panel_equal(result, expected)
Пример #28
0
    def test_numpy_round(self):
        values = [[[-3.2, 2.2], [0, -4.8213], [3.123, 123.12],
                   [-1566.213, 88.88], [-12, 94.5]],
                  [[-5.82, 3.5], [6.21, -73.272], [-9.087, 23.12],
                   [272.212, -99.99], [23, -76.5]]]
        p = Panel(values,
                  items=['Item1', 'Item2'],
                  major_axis=date_range('1/1/2000', periods=5),
                  minor_axis=['A', 'B'])

        msg = "the 'out' parameter is not supported"
        with pytest.raises(ValueError, match=msg):
            np.round(p, out=p)
Пример #29
0
    def test_setitem_ndarray(self):
        timeidx = date_range(start=datetime(2009, 1, 1),
                             end=datetime(2009, 12, 31),
                             freq=MonthEnd())
        lons_coarse = np.linspace(-177.5, 177.5, 72)
        lats_coarse = np.linspace(-87.5, 87.5, 36)
        P = Panel(items=timeidx,
                  major_axis=lons_coarse,
                  minor_axis=lats_coarse)
        data = np.random.randn(72 * 36).reshape((72, 36))
        key = datetime(2009, 2, 28)
        P[key] = data

        assert_almost_equal(P[key].values, data)
Пример #30
0
    def test_set_minor_major(self):
        # GH 11014
        df1 = DataFrame(['a', 'a', 'a', np.nan, 'a', np.nan])
        df2 = DataFrame([1.0, np.nan, 1.0, np.nan, 1.0, 1.0])
        panel = Panel({'Item1': df1, 'Item2': df2})

        newminor = notna(panel.iloc[:, :, 0])
        panel.loc[:, :, 'NewMinor'] = newminor
        assert_frame_equal(panel.loc[:, :, 'NewMinor'],
                           newminor.astype(object))

        newmajor = notna(panel.iloc[:, 0, :])
        panel.loc[:, 'NewMajor', :] = newmajor
        assert_frame_equal(panel.loc[:, 'NewMajor', :],
                           newmajor.astype(object))