diff --git a/pandas/core/panel.py b/pandas/core/panel.py index df019647e5f4e..0d8ce204366e8 100644 --- a/pandas/core/panel.py +++ b/pandas/core/panel.py @@ -320,7 +320,7 @@ def from_dict(cls, data, intersect=False, orient='items', dtype=None): data, index, columns = _homogenize_dict(data, intersect=intersect, dtype=dtype) items = Index(sorted(data.keys())) - return Panel(data, items, index, columns) + return cls(data, items, index, columns) def __getitem__(self, key): if isinstance(self.items, MultiIndex): @@ -441,7 +441,7 @@ def _get_plane_axes(self, axis): @property def _constructor(self): - return Panel + return type(self) # Fancy indexing _ix = None @@ -723,7 +723,7 @@ def _combine(self, other, func, axis=0): return self._combine_frame(other, func, axis=axis) elif np.isscalar(other): new_values = func(self.values, other) - return Panel(new_values, self.items, self.major_axis, + return self._constructor(new_values, self.items, self.major_axis, self.minor_axis) def __neg__(self): @@ -744,7 +744,7 @@ def _combine_frame(self, other, func, axis=0): new_values = func(self.values.swapaxes(0, 2), other.values) new_values = new_values.swapaxes(0, 2) - return Panel(new_values, self.items, self.major_axis, + return self._constructor(new_values, self.items, self.major_axis, self.minor_axis) def _combine_panel(self, other, func): @@ -758,7 +758,7 @@ def _combine_panel(self, other, func): result_values = func(this.values, other.values) - return Panel(result_values, items, major, minor) + return self._constructor(result_values, items, major, minor) def fillna(self, value=None, method='pad'): """ @@ -790,10 +790,10 @@ def fillna(self, value=None, method='pad'): for col, s in self.iterkv(): result[col] = s.fillna(method=method, value=value) - return Panel.from_dict(result) + return self._constructor.from_dict(result) else: new_data = self._data.fillna(value) - return Panel(new_data) + return self._constructor(new_data) add = _panel_arith_method(operator.add, 'add') subtract = sub = _panel_arith_method(operator.sub, 'subtract') @@ -904,7 +904,7 @@ def swapaxes(self, axis1='major', axis2='minor'): for k in range(3)) new_values = self.values.swapaxes(i, j).copy() - return Panel(new_values, *new_axes) + return self._constructor(new_values, *new_axes) def to_frame(self, filter_observations=True): """ @@ -1105,7 +1105,7 @@ def shift(self, lags, axis='major'): else: raise ValueError('Invalid axis') - return Panel(values, items=items, major_axis=major_axis, + return self._constructor(values, items=items, major_axis=major_axis, minor_axis=minor_axis) def truncate(self, before=None, after=None, axis='major'):