Skip to content

Commit a178546

Browse files
committed
CLN: move resolvers getter to generic.py
1 parent d12ae36 commit a178546

File tree

4 files changed

+61
-35
lines changed

4 files changed

+61
-35
lines changed

pandas/core/frame.py

Lines changed: 1 addition & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -1894,36 +1894,6 @@ def _getitem_frame(self, key):
18941894
raise ValueError('Must pass DataFrame with boolean values only')
18951895
return self.where(key)
18961896

1897-
def _get_index_resolvers(self, axis):
1898-
# index or columns
1899-
axis_index = getattr(self, axis)
1900-
d = dict()
1901-
prefix = axis[0]
1902-
1903-
for i, name in enumerate(axis_index.names):
1904-
if name is not None:
1905-
key = level = name
1906-
else:
1907-
# prefix with 'i' or 'c' depending on the input axis
1908-
# e.g., you must do ilevel_0 for the 0th level of an unnamed
1909-
# multiiindex
1910-
key = '{prefix}level_{i}'.format(prefix=prefix, i=i)
1911-
level = i
1912-
1913-
level_values = axis_index.get_level_values(level)
1914-
s = level_values.to_series()
1915-
s.index = axis_index
1916-
d[key] = s
1917-
1918-
# put the index/columns itself in the dict
1919-
if isinstance(axis_index, MultiIndex):
1920-
dindex = axis_index
1921-
else:
1922-
dindex = axis_index.to_series()
1923-
1924-
d[axis] = dindex
1925-
return d
1926-
19271897
def query(self, expr, **kwargs):
19281898
"""Query the columns of a frame with a boolean expression.
19291899
@@ -2044,8 +2014,7 @@ def eval(self, expr, **kwargs):
20442014
"""
20452015
resolvers = kwargs.pop('resolvers', None)
20462016
if resolvers is None:
2047-
index_resolvers = self._get_index_resolvers('index')
2048-
index_resolvers.update(self._get_index_resolvers('columns'))
2017+
index_resolvers = self._get_resolvers()
20492018
resolvers = [self, index_resolvers]
20502019
kwargs['local_dict'] = _ensure_scope(resolvers=resolvers, **kwargs)
20512020
return _eval(expr, **kwargs)

pandas/core/generic.py

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -272,6 +272,42 @@ def _get_block_manager_axis(self, axis):
272272
return m - axis
273273
return axis
274274

275+
def _get_axis_resolvers(self, axis):
276+
# index or columns
277+
axis_index = getattr(self, axis)
278+
d = dict()
279+
prefix = axis[0]
280+
281+
for i, name in enumerate(axis_index.names):
282+
if name is not None:
283+
key = level = name
284+
else:
285+
# prefix with 'i' or 'c' depending on the input axis
286+
# e.g., you must do ilevel_0 for the 0th level of an unnamed
287+
# multiiindex
288+
key = '{prefix}level_{i}'.format(prefix=prefix, i=i)
289+
level = i
290+
291+
level_values = axis_index.get_level_values(level)
292+
s = level_values.to_series()
293+
s.index = axis_index
294+
d[key] = s
295+
296+
# put the index/columns itself in the dict
297+
if isinstance(axis_index, MultiIndex):
298+
dindex = axis_index
299+
else:
300+
dindex = axis_index.to_series()
301+
302+
d[axis] = dindex
303+
return d
304+
305+
def _get_resolvers(self):
306+
d = {}
307+
for axis_name in self._AXIS_ORDERS:
308+
d.update(self._get_axis_resolvers(axis_name))
309+
return d
310+
275311
@property
276312
def _info_axis(self):
277313
return getattr(self, self._info_axis_name)

pandas/tests/test_frame.py

Lines changed: 23 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -11429,8 +11429,7 @@ def test_query_multiindex_get_index_resolvers(self):
1142911429

1143011430
def check_query_multiindex_get_index_resolvers(self, parser, engine):
1143111431
df = mkdf(10, 3, r_idx_nlevels=2, r_idx_names=['spam', 'eggs'])
11432-
resolvers = df._get_index_resolvers('index')
11433-
resolvers.update(df._get_index_resolvers('columns'))
11432+
resolvers = df._get_resolvers()
1143411433

1143511434
def to_series(mi, level):
1143611435
level_values = mi.get_level_values(level)
@@ -11453,6 +11452,28 @@ def to_series(mi, level):
1145311452
else:
1145411453
raise AssertionError("object must be a Series or Index")
1145511454

11455+
def test_raise_on_panel_with_multiindex(self):
11456+
for parser, engine in product(PARSERS, ENGINES):
11457+
yield self.check_raise_on_panel_with_multiindex, parser, engine
11458+
11459+
def check_raise_on_panel_with_multiindex(self, parser, engine):
11460+
skip_if_no_ne()
11461+
p = tm.makePanel(7)
11462+
p.items = tm.makeCustomIndex(len(p.items), nlevels=2)
11463+
with tm.assertRaises(NotImplementedError):
11464+
pd.eval('p + 1', parser=parser, engine=engine)
11465+
11466+
def test_raise_on_panel4d_with_multiindex(self):
11467+
for parser, engine in product(PARSERS, ENGINES):
11468+
yield self.check_raise_on_panel4d_with_multiindex, parser, engine
11469+
11470+
def check_raise_on_panel4d_with_multiindex(self, parser, engine):
11471+
skip_if_no_ne()
11472+
p4d = tm.makePanel4D(7)
11473+
p4d.items = tm.makeCustomIndex(len(p4d.items), nlevels=2)
11474+
with tm.assertRaises(NotImplementedError):
11475+
pd.eval('p4d + 1', parser=parser, engine=engine)
11476+
1145611477

1145711478
class TestDataFrameQueryNumExprPandas(unittest.TestCase):
1145811479
@classmethod

vb_suite/binary_ops.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -106,7 +106,7 @@
106106
setup = common_setup + """
107107
N = 1000000
108108
halfway = N // 2 - 1
109-
s = Series(date_range('20010101', periods=N, freq='D'))
109+
s = Series(date_range('20010101', periods=N, freq='D'))
110110
ts = s[halfway]
111111
"""
112112

0 commit comments

Comments
 (0)