Skip to content

Commit 1d18284

Browse files
committed
BUG: Panels don't behave as dicts (.e.g ".items" is not callable)
1 parent 2d03e4f commit 1d18284

File tree

11 files changed

+37
-33
lines changed

11 files changed

+37
-33
lines changed

pandas/compat/__init__.py

+18-13
Original file line numberDiff line numberDiff line change
@@ -152,23 +152,28 @@ def signature(f):
152152
lmap = builtins.map
153153
lfilter = builtins.filter
154154

155-
def _iterfactory(what):
156-
"""Functions to process/iterate on dictionaries' values/keys/items."""
157-
iterwhat = "iter%s" % what
158-
if PY2:
159-
def func(obj, **kw):
160-
return getattr(obj, iterwhat)(**kw)
161-
else:
162-
def func(obj, **kw):
163-
return iter(getattr(obj, what)(**kw))
164-
return func
165-
166-
iteritems, iterkeys, itervalues = (_iterfactory(what)
167-
for what in ("items","keys", "values"))
168155

169156
if PY2:
157+
def iteritems(obj, **kw):
158+
return obj.iteritems(**kw)
159+
160+
def iterkeys(obj, **kw):
161+
return obj.iterkeys(**kw)
162+
163+
def itervalues(obj, **kw):
164+
return obj.itervalues(**kw)
165+
170166
next = lambda it : it.next()
171167
else:
168+
def iteritems(obj, **kw):
169+
return iter(obj.items(**kw))
170+
171+
def iterkeys(obj, **kw):
172+
return iter(obj.keys(**kw))
173+
174+
def itervalues(obj, **kw):
175+
return iter(obj.values(**kw))
176+
172177
next = next
173178

174179
def bind_method(cls, name, func):

pandas/core/generic.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -3083,7 +3083,7 @@ def fillna(self, value=None, method=None, axis=None, inplace=False,
30833083

30843084
# fill in 2d chunks
30853085
result = dict([(col, s.fillna(method=method, value=value))
3086-
for col, s in compat.iteritems(self)])
3086+
for col, s in self.iteritems()])
30873087
return self._constructor.from_dict(result).__finalize__(self)
30883088

30893089
# 2d or less

pandas/core/panel.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -398,7 +398,7 @@ def to_sparse(self, fill_value=None, kind='block'):
398398
y : SparseDataFrame
399399
"""
400400
from pandas.core.sparse import SparsePanel
401-
frames = dict(compat.iteritems(self))
401+
frames = dict(self.iteritems())
402402
return SparsePanel(frames, items=self.items,
403403
major_axis=self.major_axis,
404404
minor_axis=self.minor_axis, default_kind=kind,
@@ -450,7 +450,7 @@ def to_excel(self, path, na_rep='', engine=None, **kwargs):
450450
writer = path
451451
kwargs['na_rep'] = na_rep
452452

453-
for item, df in compat.iteritems(self):
453+
for item, df in self.iteritems():
454454
name = str(item)
455455
df.to_excel(writer, name, **kwargs)
456456
writer.save()

pandas/io/pytables.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -2726,7 +2726,7 @@ def write(self, obj, **kwargs):
27262726
self.attrs.default_kind = obj.default_kind
27272727
self.write_index('items', obj.items)
27282728

2729-
for name, sdf in compat.iteritems(obj):
2729+
for name, sdf in obj.iteritems():
27302730
key = 'sparse_frame_%s' % name
27312731
if key not in self.group._v_children:
27322732
node = self._handle.create_group(self.group, key)

pandas/sparse/panel.py

+3-3
Original file line numberDiff line numberDiff line change
@@ -392,7 +392,7 @@ def _combine(self, other, func, axis=0):
392392
return self._combinePanel(other, func)
393393
elif np.isscalar(other):
394394
new_frames = dict((k, func(v, other))
395-
for k, v in compat.iteritems(self))
395+
for k, v in self.iteritems())
396396
return self._new_like(new_frames)
397397

398398
def _combineFrame(self, other, func, axis=0):
@@ -469,7 +469,7 @@ def major_xs(self, key):
469469
y : DataFrame
470470
index -> minor axis, columns -> items
471471
"""
472-
slices = dict((k, v.xs(key)) for k, v in compat.iteritems(self))
472+
slices = dict((k, v.xs(key)) for k, v in self.iteritems())
473473
return DataFrame(slices, index=self.minor_axis, columns=self.items)
474474

475475
def minor_xs(self, key):
@@ -486,7 +486,7 @@ def minor_xs(self, key):
486486
y : SparseDataFrame
487487
index -> major axis, columns -> items
488488
"""
489-
slices = dict((k, v[key]) for k, v in compat.iteritems(self))
489+
slices = dict((k, v[key]) for k, v in self.iteritems())
490490
return SparseDataFrame(slices, index=self.major_axis,
491491
columns=self.items,
492492
default_fill_value=self.default_fill_value,

pandas/sparse/tests/test_sparse.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ def assert_sp_frame_equal(left, right, exact_indices=True):
104104

105105

106106
def assert_sp_panel_equal(left, right, exact_indices=True):
107-
for item, frame in compat.iteritems(left):
107+
for item, frame in left.iteritems():
108108
assert (item in right)
109109
# trade-off?
110110
assert_sp_frame_equal(frame, right[item], exact_indices=exact_indices)

pandas/stats/tests/test_fama_macbeth.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@ def checkFamaMacBethExtended(self, window_type, x, y, **kwds):
4444
end = index[i + window - 1]
4545

4646
x2 = {}
47-
for k, v in compat.iteritems(x):
47+
for k, v in x.iteritems():
4848
x2[k] = v.truncate(start, end)
4949
y2 = y.truncate(start, end)
5050

pandas/stats/tests/test_ols.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -573,7 +573,7 @@ def test_wls_panel(self):
573573

574574
stack_y = y.stack()
575575
stack_x = DataFrame(dict((k, v.stack())
576-
for k, v in compat.iteritems(x)))
576+
for k, v in x.iteritems()))
577577

578578
weights = x.std('items')
579579
stack_weights = weights.stack()

pandas/tests/test_panel.py

+6-6
Original file line numberDiff line numberDiff line change
@@ -318,10 +318,10 @@ def test_keys(self):
318318
def test_iteritems(self):
319319
# Test panel.iteritems(), aka panel.iteritems()
320320
# just test that it works
321-
for k, v in compat.iteritems(self.panel):
321+
for k, v in self.panel.iteritems():
322322
pass
323323

324-
self.assertEqual(len(list(compat.iteritems(self.panel))),
324+
self.assertEqual(len(list(self.panel.iteritems())),
325325
len(self.panel.items))
326326

327327
@ignore_sparse_panel_future_warning
@@ -1105,7 +1105,7 @@ def test_ctor_dict(self):
11051105
assert_panel_equal(result, expected)
11061106

11071107
def test_constructor_dict_mixed(self):
1108-
data = dict((k, v.values) for k, v in compat.iteritems(self.panel))
1108+
data = dict((k, v.values) for k, v in self.panel.iteritems())
11091109
result = Panel(data)
11101110
exp_major = Index(np.arange(len(self.panel.major_axis)))
11111111
self.assertTrue(result.major_axis.equals(exp_major))
@@ -1872,7 +1872,7 @@ def test_shift(self):
18721872
# negative numbers, #2164
18731873
result = self.panel.shift(-1)
18741874
expected = Panel(dict((i, f.shift(-1)[:-1])
1875-
for i, f in compat.iteritems(self.panel)))
1875+
for i, f in self.panel.iteritems()))
18761876
assert_panel_equal(result, expected)
18771877

18781878
# mixed dtypes #6959
@@ -2072,7 +2072,7 @@ def test_to_excel(self):
20722072
except ImportError:
20732073
raise nose.SkipTest("need xlwt xlrd openpyxl")
20742074

2075-
for item, df in compat.iteritems(self.panel):
2075+
for item, df in self.panel.iteritems():
20762076
recdf = reader.parse(str(item), index_col=0)
20772077
assert_frame_equal(df, recdf)
20782078

@@ -2092,7 +2092,7 @@ def test_to_excel_xlsxwriter(self):
20922092
except ImportError as e:
20932093
raise nose.SkipTest("cannot write excel file: %s" % e)
20942094

2095-
for item, df in compat.iteritems(self.panel):
2095+
for item, df in self.panel.iteritems():
20962096
recdf = reader.parse(str(item), index_col=0)
20972097
assert_frame_equal(df, recdf)
20982098

pandas/tests/test_panel4d.py

+2-3
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,6 @@
1212
from pandas.core.panel4d import Panel4D
1313
from pandas.core.series import remove_na
1414
import pandas.core.common as com
15-
from pandas import compat
1615

1716
from pandas.util.testing import (assert_panel_equal,
1817
assert_panel4d_equal,
@@ -232,7 +231,7 @@ def test_keys(self):
232231
def test_iteritems(self):
233232
"""Test panel4d.iteritems()"""
234233

235-
self.assertEqual(len(list(compat.iteritems(self.panel4d))),
234+
self.assertEqual(len(list(self.panel4d.iteritems())),
236235
len(self.panel4d.labels))
237236

238237
def test_combinePanel4d(self):
@@ -731,7 +730,7 @@ def test_ctor_dict(self):
731730
# assert_panel_equal(result, expected)
732731

733732
def test_constructor_dict_mixed(self):
734-
data = dict((k, v.values) for k, v in compat.iteritems(self.panel4d))
733+
data = dict((k, v.values) for k, v in self.panel4d.iteritems())
735734
result = Panel4D(data)
736735
exp_major = Index(np.arange(len(self.panel4d.major_axis)))
737736
self.assertTrue(result.major_axis.equals(exp_major))

pandas/tools/tests/test_merge.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -2671,7 +2671,7 @@ def test_panel_join_many(self):
26712671

26722672
data_dict = {}
26732673
for p in panels:
2674-
data_dict.update(compat.iteritems(p))
2674+
data_dict.update(p.iteritems())
26752675

26762676
joined = panels[0].join(panels[1:], how='inner')
26772677
expected = Panel.from_dict(data_dict, intersect=True)

0 commit comments

Comments
 (0)