From c4279e736cb654c16123a9e9e03ebff7042bdbf1 Mon Sep 17 00:00:00 2001 From: jreback Date: Wed, 11 Sep 2013 16:59:58 -0400 Subject: [PATCH] API: Complex compat for Series with ndarray. (GH4819) --- doc/source/cookbook.rst | 2 +- doc/source/release.rst | 1 + pandas/core/series.py | 18 ++++++++++++++++++ pandas/tests/test_series.py | 13 +++++++++++++ 4 files changed, 33 insertions(+), 1 deletion(-) diff --git a/doc/source/cookbook.rst b/doc/source/cookbook.rst index 0b0023f533705..5dcb6c20be69d 100644 --- a/doc/source/cookbook.rst +++ b/doc/source/cookbook.rst @@ -116,7 +116,7 @@ panelnd The :ref:`panelnd` docs. `Construct a 5D panelnd -http://stackoverflow.com/questions/18748598/why-my-panelnd-factory-throwing-a-keyerror`__ +`__ .. _cookbook.missing_data: diff --git a/doc/source/release.rst b/doc/source/release.rst index fd724af9917d2..087d2880511d2 100644 --- a/doc/source/release.rst +++ b/doc/source/release.rst @@ -265,6 +265,7 @@ See :ref:`Internal Refactoring` - Refactor of ``_get_numeric_data/_get_bool_data`` to core/generic.py, allowing Series/Panel functionaility - Refactor of Series arithmetic with time-like objects (datetime/timedelta/time etc.) into a separate, cleaned up wrapper class. (:issue:`4613`) +- Complex compat for ``Series`` with ``ndarray``. (:issue:`4819`) Experimental Features ~~~~~~~~~~~~~~~~~~~~~ diff --git a/pandas/core/series.py b/pandas/core/series.py index 32f6765b5d84d..577e0a8b57930 100644 --- a/pandas/core/series.py +++ b/pandas/core/series.py @@ -35,6 +35,7 @@ from pandas import compat from pandas.util.terminal import get_terminal_size from pandas.compat import zip, lzip, u, OrderedDict +from pandas.util import rwproperty import pandas.core.array as pa @@ -793,6 +794,23 @@ def __array_wrap__(self, result): def __contains__(self, key): return key in self.index + # complex + @rwproperty.getproperty + def real(self): + return self.values.real + + @rwproperty.setproperty + def real(self, v): + self.values.real = v + + @rwproperty.getproperty + def imag(self): + return self.values.imag + + @rwproperty.setproperty + def imag(self, v): + self.values.imag = v + # coercion __float__ = _coerce_method(float) __long__ = _coerce_method(int) diff --git a/pandas/tests/test_series.py b/pandas/tests/test_series.py index 7f8fa1019261f..1f008354756bc 100644 --- a/pandas/tests/test_series.py +++ b/pandas/tests/test_series.py @@ -2814,6 +2814,19 @@ def f(x): expected = Series(1,index=range(10),dtype='float64') #assert_series_equal(result,expected) + def test_complexx(self): + + # GH4819 + # complex access for ndarray compat + a = np.arange(5) + b = Series(a + 4j*a) + tm.assert_almost_equal(a,b.real) + tm.assert_almost_equal(4*a,b.imag) + + b.real = np.arange(5)+5 + tm.assert_almost_equal(a+5,b.real) + tm.assert_almost_equal(4*a,b.imag) + def test_underlying_data_conversion(self): # GH 4080