Skip to content

Commit 40fb1bf

Browse files
author
Chang She
committed
ENH: copy keyword to Panel swapaxes/transpose #695
1 parent 47abe8c commit 40fb1bf

File tree

2 files changed

+21
-18
lines changed

2 files changed

+21
-18
lines changed

pandas/core/panel.py

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -912,7 +912,7 @@ def groupby(self, function, axis='major'):
912912
axis = self._get_axis_number(axis)
913913
return PanelGroupBy(self, function, axis=axis)
914914

915-
def swapaxes(self, axis1='major', axis2='minor'):
915+
def swapaxes(self, axis1='major', axis2='minor', copy=True):
916916
"""
917917
Interchange axes and swap values axes appropriately
918918
@@ -930,11 +930,14 @@ def swapaxes(self, axis1='major', axis2='minor'):
930930

931931
new_axes = (self._get_axis(mapping.get(k, k))
932932
for k in range(3))
933-
new_values = self.values.swapaxes(i, j).copy()
933+
new_values = self.values.swapaxes(i, j)
934+
if copy:
935+
new_values = new_values.copy()
934936

935937
return self._constructor(new_values, *new_axes)
936938

937-
def transpose(self, items='items', major='major', minor='minor'):
939+
def transpose(self, items='items', major='major', minor='minor',
940+
copy=True):
938941
"""
939942
Permute the dimensions of the Panel
940943
@@ -948,7 +951,9 @@ def transpose(self, items='items', major='major', minor='minor'):
948951
raise ValueError('Must specify 3 unique axes')
949952

950953
new_axes = [self._get_axis(x) for x in [i, j, k]]
951-
new_values = self.values.transpose((i, j, k)).copy()
954+
new_values = self.values.transpose((i, j, k))
955+
if copy:
956+
new_values = new_values.copy()
952957
return self._constructor(new_values, *new_axes)
953958

954959
def to_frame(self, filter_observations=True):

pandas/tests/test_panel.py

Lines changed: 12 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -888,11 +888,17 @@ def test_swapaxes(self):
888888
result = self.panel.swapaxes('major', 'minor')
889889
self.assert_(result.major_axis is self.panel.minor_axis)
890890

891+
panel = self.panel.copy()
892+
result = panel.swapaxes('major', 'minor')
893+
panel.values[0, 0, 1] = np.nan
894+
expected = panel.swapaxes('major', 'minor')
895+
assert_panel_equal(result, expected)
896+
891897
# this should also work
892898
result = self.panel.swapaxes(0, 1)
893899
self.assert_(result.items is self.panel.major_axis)
894900

895-
# this should also work
901+
# this should not work
896902
self.assertRaises(Exception, self.panel.swapaxes, 'items', 'items')
897903

898904
def test_transpose(self):
@@ -911,22 +917,14 @@ def test_transpose(self):
911917
result = self.panel.transpose(2, 0, 1)
912918
assert_panel_equal(result, expected)
913919

914-
def test_transpose_sparse(self):
915-
spanel = self.panel.to_sparse()
916-
result = spanel.transpose('minor', 'major', 'items')
917-
expected = spanel.swapaxes('items', 'minor')
918-
assert_panel_equal(result, expected)
919-
920-
result = spanel.transpose(2, 1, 0)
921-
assert_panel_equal(result, expected)
922-
923-
result = spanel.transpose('minor', 'items', 'major')
924-
expected = spanel.swapaxes('items', 'minor')
920+
panel = self.panel.copy()
921+
result = panel.transpose(2, 0, 1, copy=False)
922+
panel.values[0, 0, 1] = np.nan
923+
expected = panel.swapaxes('items', 'minor')
925924
expected = expected.swapaxes('major', 'minor')
926925
assert_panel_equal(result, expected)
927926

928-
result = spanel.transpose(2, 0, 1)
929-
assert_panel_equal(result, expected)
927+
self.assertRaises(ValueError, self.panel.transpose, 0, 0, 1)
930928

931929
def test_to_frame(self):
932930
# filtered

0 commit comments

Comments
 (0)