Skip to content

Commit 231a6da

Browse files
committed
ENH: accept ndarray input to __setitem__ in Panel, GH #452
1 parent 1c91bca commit 231a6da

File tree

2 files changed

+17
-1
lines changed

2 files changed

+17
-1
lines changed

pandas/core/panel.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -513,7 +513,9 @@ def __setitem__(self, key, value):
513513
value = value.reindex(index=self.major_axis,
514514
columns=self.minor_axis)
515515
mat = value.values
516-
516+
elif isinstance(value, np.ndarray):
517+
assert(value.shape == (N, K))
518+
mat = np.asarray(value)
517519
elif np.isscalar(value):
518520
dtype = _infer_dtype(value)
519521
mat = np.empty((N, K), dtype=dtype)

pandas/tests/test_panel.py

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -387,6 +387,20 @@ def test_setitem(self):
387387
self.panel['ItemP'] = self.panel['ItemA'] > 0
388388
self.assert_(self.panel['ItemP'].values.dtype == np.bool_)
389389

390+
def test_setitem_ndarray(self):
391+
from pandas import DateRange, datetools
392+
393+
timeidx = DateRange(start=datetime(2009,1,1),
394+
end=datetime(2009,12,31),
395+
offset=datetools.MonthEnd())
396+
lons_coarse = np.linspace(-177.5, 177.5, 72)
397+
lats_coarse = np.linspace(-87.5, 87.5, 36)
398+
P = Panel(items=timeidx, major_axis=lons_coarse, minor_axis=lats_coarse)
399+
data = np.random.randn(72*36).reshape((72,36))
400+
key = datetime(2009,2,28)
401+
P[key] = data
402+
403+
assert_almost_equal(P[key].values, data)
390404

391405
def test_major_xs(self):
392406
ref = self.panel['ItemA']

0 commit comments

Comments
 (0)