-
-
Notifications
You must be signed in to change notification settings - Fork 18.5k
DOC: update the DataFrame.eval() docstring #20209
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Changes from 4 commits
3e8ff19
c86dc09
b67e76c
b48d7c6
f45aebe
194bdc2
b1301d8
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -2462,48 +2462,97 @@ def query(self, expr, inplace=False, **kwargs): | |
return new_data | ||
|
||
def eval(self, expr, inplace=False, **kwargs): | ||
"""Evaluate an expression in the context of the calling DataFrame | ||
instance. | ||
""" | ||
Evaluate a string describing operations on DataFrame columns. | ||
|
||
Operates on columns only, not specific rows or elements. This allows | ||
`eval` to run arbitrary code, which can make you vulnerable to code | ||
injection if you pass user input to this function. | ||
|
||
Parameters | ||
---------- | ||
expr : string | ||
expr : str | ||
The expression string to evaluate. | ||
inplace : bool, default False | ||
If the expression contains an assignment, whether to perform the | ||
operation inplace and mutate the existing DataFrame. Otherwise, | ||
a new DataFrame is returned. | ||
|
||
.. versionadded:: 0.18.0 | ||
|
||
.. versionadded:: 0.18.0. | ||
kwargs : dict | ||
See the documentation for :func:`~pandas.eval` for complete details | ||
on the keyword arguments accepted by | ||
:meth:`~pandas.DataFrame.query`. | ||
|
||
Returns | ||
------- | ||
ret : ndarray, scalar, or pandas object | ||
ndarray, scalar, or pandas object | ||
The result of the evaluation. | ||
|
||
See Also | ||
-------- | ||
pandas.DataFrame.query | ||
pandas.DataFrame.assign | ||
pandas.eval | ||
pandas.DataFrame.query : Evaluates a boolean expression to query the | ||
columns of a frame. | ||
pandas.DataFrame.assign : Can evaluate an expression or function to | ||
create new values for a column. | ||
pandas.eval : Evaluate a Python expression as a string using various | ||
backends. | ||
|
||
Notes | ||
----- | ||
For more details see the API documentation for :func:`~pandas.eval`. | ||
For detailed examples see :ref:`enhancing performance with eval | ||
<enhancingperf.eval>`. | ||
|
||
This function calls `pandas.eval()` and is likely to be slower than | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Is this meaningfully slower than |
||
it. | ||
|
||
Examples | ||
-------- | ||
>>> from numpy.random import randn | ||
>>> from pandas import DataFrame | ||
>>> df = pd.DataFrame(randn(10, 2), columns=list('ab')) | ||
>>> df.eval('a + b') | ||
>>> df.eval('c = a + b') | ||
>>> df = pd.DataFrame({'A': range(1, 6), 'B': range(10, 0, -2)}) | ||
>>> df | ||
A B | ||
0 1 10 | ||
1 2 8 | ||
2 3 6 | ||
3 4 4 | ||
4 5 2 | ||
>>> df.eval('A + B') | ||
0 11 | ||
1 10 | ||
2 9 | ||
3 8 | ||
4 7 | ||
dtype: int64 | ||
|
||
Assignment is allowed and by default the original DataFrame is not | ||
modified. | ||
|
||
>>> df.eval('C = A + B') | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. Could you add a line before this saying "Assignment is allowed and by default the original DataFrame is not modiefied." |
||
A B C | ||
0 1 10 11 | ||
1 2 8 10 | ||
2 3 6 9 | ||
3 4 4 8 | ||
4 5 2 7 | ||
>>> df | ||
A B | ||
0 1 10 | ||
1 2 8 | ||
2 3 6 | ||
3 4 4 | ||
4 5 2 | ||
|
||
Use inplace=True to modify the original DataFrame. | ||
|
||
>>> df.eval('C = A + B', inplace=True) | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. And before this, say "use |
||
>>> df | ||
A B C | ||
0 1 10 11 | ||
1 2 8 10 | ||
2 3 6 9 | ||
3 4 4 8 | ||
4 5 2 7 | ||
""" | ||
from pandas.core.computation.eval import eval as _eval | ||
|
||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I believe
DataFrame.query
andDataFrame.assign
will work. You will needpandas
inpandas.eval
.