@@ -131,7 +131,7 @@ def _check_for_locals(expr, stack_level, parser):
131
131
raise SyntaxError (msg )
132
132
133
133
134
- def eval (expr , parser = 'pandas' , engine = 'numexpr' , truediv = True ,
134
+ def eval (expr , parser = 'pandas' , engine = None , truediv = True ,
135
135
local_dict = None , global_dict = None , resolvers = (), level = 0 ,
136
136
target = None , inplace = None ):
137
137
"""Evaluate a Python expression as a string using various backends.
@@ -160,7 +160,7 @@ def eval(expr, parser='pandas', engine='numexpr', truediv=True,
160
160
``'python'`` parser to retain strict Python semantics. See the
161
161
:ref:`enhancing performance <enhancingperf.eval>` documentation for
162
162
more details.
163
- engine : string, default 'numexpr' , {'python', 'numexpr'}
163
+ engine : string, default None , {'python', 'numexpr'}
164
164
165
165
The engine used to evaluate the expression. Supported engines are
166
166
@@ -172,6 +172,9 @@ def eval(expr, parser='pandas', engine='numexpr', truediv=True,
172
172
173
173
More backends may be available in the future.
174
174
175
+ If set to None (the default) then uses ``'numexpr'`` if available, otherwise
176
+ uses ``'python'``.
177
+
175
178
truediv : bool, optional
176
179
Whether to use true division, like in Python >= 3
177
180
local_dict : dict or None, optional
@@ -227,6 +230,12 @@ def eval(expr, parser='pandas', engine='numexpr', truediv=True,
227
230
raise ValueError ("multi-line expressions are only valid in the "
228
231
"context of data, use DataFrame.eval" )
229
232
233
+ if engine is None :
234
+ if _NUMEXPR_INSTALLED :
235
+ engine = 'numexpr'
236
+ else :
237
+ engine = 'python'
238
+
230
239
first_expr = True
231
240
for expr in exprs :
232
241
expr = _convert_expression (expr )
0 commit comments