diff --git a/pandas/core/frame.py b/pandas/core/frame.py index ba730c0c0fe41..dbe2390eff9a7 100755 --- a/pandas/core/frame.py +++ b/pandas/core/frame.py @@ -1733,6 +1733,24 @@ def _getitem_frame(self, key): raise ValueError('Must pass DataFrame with boolean values only') return self.where(key) + def left(self, n=5): + """ + Return first n columns + """ + l = self.shape[1] + if l == 0 or n == 0: + return self + return self.iloc[:, :n] + + def right(self, n=5): + """ + Return last n columns + """ + l = self.shape[1] + if l == 0 or n == 0: + return self + return self.iloc[:, -n:] + def query(self, expr, **kwargs): """Query the columns of a frame with a boolean expression. diff --git a/pandas/core/generic.py b/pandas/core/generic.py index 01af7534d458d..328f503ee4476 100644 --- a/pandas/core/generic.py +++ b/pandas/core/generic.py @@ -1781,7 +1781,7 @@ def head(self, n=5): Returns first n rows """ l = len(self) - if l == 0 or n==0: + if l == 0 or n == 0: return self return self.iloc[:n] diff --git a/pandas/tests/test_frame.py b/pandas/tests/test_frame.py index fc68449f75e0f..844904c2e0a3d 100644 --- a/pandas/tests/test_frame.py +++ b/pandas/tests/test_frame.py @@ -4470,6 +4470,29 @@ def test_head_tail(self): assert_frame_equal(empty_df.tail(), empty_df) assert_frame_equal(empty_df.head(), empty_df) + def test_left_right(self): + assert_frame_equal(self.frame.left(), self.frame.iloc[:, :5]) + assert_frame_equal(self.frame.right(), self.frame.iloc[:, -5:]) + assert_frame_equal(self.frame.left(0), self.frame) + assert_frame_equal(self.frame.right(0), self.frame) + assert_frame_equal(self.frame.left(-1), self.frame.iloc[:, :-1]) + assert_frame_equal(self.frame.right(-1), self.frame.iloc[:, 1:]) + assert_frame_equal(self.frame.left(1), self.frame.iloc[:, :1]) + assert_frame_equal(self.frame.right(1), self.frame.iloc[:, -1:]) + # with a float index + df = self.frame.copy() + df.index = np.arange(len(self.frame)) + 0.1 + assert_frame_equal(df.left(), df.iloc[:, :5]) + assert_frame_equal(df.right(), df.iloc[:, -5:]) + assert_frame_equal(df.left(0), df) + assert_frame_equal(df.right(0), df) + assert_frame_equal(df.left(-1), df.iloc[:, :-1]) + assert_frame_equal(df.right(-1), df.iloc[:, 1:]) + #test empty dataframe + empty_df = DataFrame() + assert_frame_equal(empty_df.right(), empty_df) + assert_frame_equal(empty_df.left(), empty_df) + def test_insert(self): df = DataFrame(np.random.randn(5, 3), index=np.arange(5), columns=['c', 'b', 'a'])