@@ -4577,36 +4577,44 @@ def query(self, expr: str, *, inplace: bool = False, **kwargs) -> DataFrame | No
4577
4577
Examples
4578
4578
--------
4579
4579
>>> df = pd.DataFrame(
4580
- ... {"A": range(1, 6), "B": range(10, 0, -2), "C C": range(10, 5, -1)}
4580
+ ... {"A": range(1, 6), "B": range(10, 0, -2), "C& C": range(10, 5, -1)}
4581
4581
... )
4582
4582
>>> df
4583
- A B C C
4583
+ A B C& C
4584
4584
0 1 10 10
4585
4585
1 2 8 9
4586
4586
2 3 6 8
4587
4587
3 4 4 7
4588
4588
4 5 2 6
4589
4589
>>> df.query("A > B")
4590
- A B C C
4590
+ A B C& C
4591
4591
4 5 2 6
4592
4592
4593
4593
The previous expression is equivalent to
4594
4594
4595
4595
>>> df[df.A > df.B]
4596
- A B C C
4596
+ A B C& C
4597
4597
4 5 2 6
4598
4598
4599
4599
For columns with spaces in their name, you can use backtick quoting.
4600
4600
4601
- >>> df.query("B == `C C`")
4602
- A B C C
4601
+ >>> df.query("B == `C& C`")
4602
+ A B C& C
4603
4603
0 1 10 10
4604
4604
4605
4605
The previous expression is equivalent to
4606
4606
4607
- >>> df[df.B == df["C C"]]
4608
- A B C C
4607
+ >>> df[df.B == df["C& C"]]
4608
+ A B C& C
4609
4609
0 1 10 10
4610
+
4611
+ Using local variable:
4612
+
4613
+ >>> local_var = 2
4614
+ >>> df.query("A <= @local_var")
4615
+ A B C&C
4616
+ 0 1 10 10
4617
+ 1 2 8 9
4610
4618
"""
4611
4619
inplace = validate_bool_kwarg (inplace , "inplace" )
4612
4620
if not isinstance (expr , str ):
@@ -4647,6 +4655,13 @@ def eval(self, expr: str, *, inplace: bool = False, **kwargs) -> Any | None:
4647
4655
----------
4648
4656
expr : str
4649
4657
The expression string to evaluate.
4658
+
4659
+ You can refer to variables
4660
+ in the environment by prefixing them with an '@' character like
4661
+ ``@a + b``.
4662
+
4663
+ You can refer to column names that are not valid Python variable
4664
+ names by surrounding them with backticks `````.
4650
4665
inplace : bool, default False
4651
4666
If the expression contains an assignment, whether to perform the
4652
4667
operation inplace and mutate the existing DataFrame. Otherwise,
@@ -4678,14 +4693,16 @@ def eval(self, expr: str, *, inplace: bool = False, **kwargs) -> Any | None:
4678
4693
4679
4694
Examples
4680
4695
--------
4681
- >>> df = pd.DataFrame({"A": range(1, 6), "B": range(10, 0, -2)})
4696
+ >>> df = pd.DataFrame(
4697
+ ... {"A": range(1, 6), "B": range(10, 0, -2), "C&C": range(10, 5, -1)}
4698
+ ... )
4682
4699
>>> df
4683
- A B
4684
- 0 1 10
4685
- 1 2 8
4686
- 2 3 6
4687
- 3 4 4
4688
- 4 5 2
4700
+ A B C&C
4701
+ 0 1 10 10
4702
+ 1 2 8 9
4703
+ 2 3 6 8
4704
+ 3 4 4 7
4705
+ 4 5 2 6
4689
4706
>>> df.eval("A + B")
4690
4707
0 11
4691
4708
1 10
@@ -4697,35 +4714,55 @@ def eval(self, expr: str, *, inplace: bool = False, **kwargs) -> Any | None:
4697
4714
Assignment is allowed though by default the original DataFrame is not
4698
4715
modified.
4699
4716
4700
- >>> df.eval("C = A + B")
4701
- A B C
4702
- 0 1 10 11
4703
- 1 2 8 10
4704
- 2 3 6 9
4705
- 3 4 4 8
4706
- 4 5 2 7
4717
+ >>> df.eval("D = A + B")
4718
+ A B C&C D
4719
+ 0 1 10 10 11
4720
+ 1 2 8 9 10
4721
+ 2 3 6 8 9
4722
+ 3 4 4 7 8
4723
+ 4 5 2 6 7
4707
4724
>>> df
4708
- A B
4709
- 0 1 10
4710
- 1 2 8
4711
- 2 3 6
4712
- 3 4 4
4713
- 4 5 2
4725
+ A B C&C
4726
+ 0 1 10 10
4727
+ 1 2 8 9
4728
+ 2 3 6 8
4729
+ 3 4 4 7
4730
+ 4 5 2 6
4714
4731
4715
4732
Multiple columns can be assigned to using multi-line expressions:
4716
4733
4717
4734
>>> df.eval(
4718
4735
... '''
4719
- ... C = A + B
4720
- ... D = A - B
4736
+ ... D = A + B
4737
+ ... E = A - B
4721
4738
... '''
4722
4739
... )
4723
- A B C D
4724
- 0 1 10 11 -9
4725
- 1 2 8 10 -6
4726
- 2 3 6 9 -3
4727
- 3 4 4 8 0
4728
- 4 5 2 7 3
4740
+ A B C&C D E
4741
+ 0 1 10 10 11 -9
4742
+ 1 2 8 9 10 -6
4743
+ 2 3 6 8 9 -3
4744
+ 3 4 4 7 8 0
4745
+ 4 5 2 6 7 3
4746
+
4747
+ For columns with spaces in their name, you can use backtick quoting.
4748
+
4749
+ >>> df.eval("B * `C&C`")
4750
+ 0 100
4751
+ 1 72
4752
+ 2 48
4753
+ 3 28
4754
+ 4 12
4755
+
4756
+ Local variables shall be explicitly referenced using ``@``
4757
+ character in front of the name:
4758
+
4759
+ >>> local_var = 2
4760
+ >>> df.eval("@local_var * A")
4761
+ 0 2
4762
+ 1 4
4763
+ 2 6
4764
+ 3 8
4765
+ 4 10
4729
4766
"""
4730
4767
from pandas .core .computation .eval import eval as _eval
4731
4768
0 commit comments