From 61e102a16dff7e1db29675b1ee714ccfe9916e47 Mon Sep 17 00:00:00 2001 From: "K.-Michael Aye" Date: Tue, 29 Apr 2014 17:41:19 -0600 Subject: [PATCH 1/2] adding left and right view to DataFrame, equivalent to head() and tail() --- pandas/core/generic.py | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/pandas/core/generic.py b/pandas/core/generic.py index 01af7534d458d..3f350c47c9113 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] @@ -1794,6 +1794,24 @@ def tail(self, n=5): return self return self.iloc[-n:] + 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:] + #---------------------------------------------------------------------- # Attribute access From f26cf9e6655167f89b4f50ce6e2246a6d059f497 Mon Sep 17 00:00:00 2001 From: "K.-Michael Aye" Date: Tue, 29 Apr 2014 18:07:51 -0600 Subject: [PATCH 2/2] moving left() and right() helpers from core to frame and adding tests --- pandas/core/frame.py | 18 ++++++++++++++++++ pandas/core/generic.py | 18 ------------------ pandas/tests/test_frame.py | 23 +++++++++++++++++++++++ 3 files changed, 41 insertions(+), 18 deletions(-) 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 3f350c47c9113..328f503ee4476 100644 --- a/pandas/core/generic.py +++ b/pandas/core/generic.py @@ -1794,24 +1794,6 @@ def tail(self, n=5): return self return self.iloc[-n:] - 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:] - #---------------------------------------------------------------------- # Attribute access 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'])