From 58103b6afb93fa4c8ef7bafaebdb8349828adc20 Mon Sep 17 00:00:00 2001 From: Thomas Kluyver Date: Mon, 10 Oct 2011 18:37:05 +0100 Subject: [PATCH] Add simple attribute access to DataFrame columns. --- pandas/core/frame.py | 8 ++++++++ pandas/tests/test_frame.py | 4 ++++ 2 files changed, 12 insertions(+) diff --git a/pandas/core/frame.py b/pandas/core/frame.py index 6338492558254..e5a7ee65e5d0e 100644 --- a/pandas/core/frame.py +++ b/pandas/core/frame.py @@ -860,6 +860,14 @@ def _getitem_single(self, key): res = Series(values, index=self.index, name=key) self._series_cache[key] = res return res + + def __getattr__(self, name): + """After regular attribute access, try looking up the name of a column. + This allows simpler access to columns for interactive use.""" + if name in self.columns: + return self[name] + raise AttributeError("'%s' object has no attribute '%s'" % \ + (type(self).__name__, name)) def __setitem__(self, key, value): # support boolean setting with DataFrame input, e.g. diff --git a/pandas/tests/test_frame.py b/pandas/tests/test_frame.py index 06795d5cafd04..559349c6e31f0 100644 --- a/pandas/tests/test_frame.py +++ b/pandas/tests/test_frame.py @@ -67,6 +67,10 @@ def test_getitem_boolean(self): subframe_obj = self.tsframe[indexer_obj] assert_frame_equal(subframe_obj, subframe) + + def test_getattr(self): + tm.assert_series_equal(self.frame.A, self.frame['A']) + self.assertRaises(AttributeError, getattr, self.frame, 'NONEXISTENT_NAME') def test_setitem(self): # not sure what else to do here