Skip to content

Commit 1340dd6

Browse files
committed
COMPAT: numpy warnings on invalid indexer in computation
1 parent 2a96aa1 commit 1340dd6

File tree

1 file changed

+11
-6
lines changed

1 file changed

+11
-6
lines changed

pandas/core/computation/eval.py

+11-6
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
"""Top level ``eval`` module.
44
"""
55

6+
import warnings
67
import tokenize
78
from pandas.io.formats.printing import pprint_thing
89
from pandas.core.computation.scope import _ensure_scope
@@ -303,7 +304,8 @@ def eval(expr, parser='pandas', engine=None, truediv=True,
303304
"if there is no assignment")
304305

305306
# assign if needed
306-
if env.target is not None and parsed_expr.assigner is not None:
307+
assigner = parsed_expr.assigner
308+
if env.target is not None and assigner is not None:
307309
target_modified = True
308310

309311
# if returning a copy, copy only on the first assignment
@@ -317,22 +319,25 @@ def eval(expr, parser='pandas', engine=None, truediv=True,
317319

318320
# TypeError is most commonly raised (e.g. int, list), but you
319321
# get IndexError if you try to do this assignment on np.ndarray.
322+
# we will ignore numpy warnings here; e.g. if trying
323+
# to use a non-numeric indexer
320324
try:
321-
target[parsed_expr.assigner] = ret
325+
with warnings.catch_warnings(record=True):
326+
target[assigner] = ret
322327
except (TypeError, IndexError):
323328
raise ValueError("Cannot assign expression output to target")
324329

325330
if not resolvers:
326-
resolvers = ({parsed_expr.assigner: ret},)
331+
resolvers = ({assigner: ret},)
327332
else:
328333
# existing resolver needs updated to handle
329334
# case of mutating existing column in copy
330335
for resolver in resolvers:
331-
if parsed_expr.assigner in resolver:
332-
resolver[parsed_expr.assigner] = ret
336+
if assigner in resolver:
337+
resolver[assigner] = ret
333338
break
334339
else:
335-
resolvers += ({parsed_expr.assigner: ret},)
340+
resolvers += ({assigner: ret},)
336341

337342
ret = None
338343
first_expr = False

0 commit comments

Comments
 (0)