@@ -737,6 +737,17 @@ def test_and_logic_string_match(self):
737
737
assert pd .eval (f"{ event .str .match ('hello' ).a } " )
738
738
assert pd .eval (f"{ event .str .match ('hello' ).a and event .str .match ('hello' ).a } " )
739
739
740
+ def test_eval_keep_name (self , engine , parser ):
741
+ df = Series ([2 , 15 , 28 ], name = "a" ).to_frame ()
742
+ res = df .eval ("a + a" , engine = engine , parser = parser )
743
+ expected = Series ([4 , 30 , 56 ], name = "a" )
744
+ tm .assert_series_equal (expected , res )
745
+
746
+ def test_eval_unmatching_names (self , engine , parser ):
747
+ variable_name = Series ([42 ], name = "series_name" )
748
+ res = pd .eval ("variable_name + 0" , engine = engine , parser = parser )
749
+ tm .assert_series_equal (variable_name , res )
750
+
740
751
741
752
# -------------------------------------
742
753
# gh-12388: Typecasting rules consistency with python
@@ -1269,14 +1280,12 @@ def test_assignment_explicit(self):
1269
1280
expected ["c" ] = expected ["a" ] + expected ["b" ]
1270
1281
tm .assert_frame_equal (df , expected )
1271
1282
1272
- def test_column_in (self ):
1283
+ def test_column_in (self , engine ):
1273
1284
# GH 11235
1274
1285
df = DataFrame ({"a" : [11 ], "b" : [- 32 ]})
1275
- result = df .eval ("a in [11, -32]" )
1276
- expected = Series ([True ])
1277
- # TODO: 2022-01-29: Name check failed with numexpr 2.7.3 in CI
1278
- # but cannot reproduce locally
1279
- tm .assert_series_equal (result , expected , check_names = False )
1286
+ result = df .eval ("a in [11, -32]" , engine = engine )
1287
+ expected = Series ([True ], name = "a" )
1288
+ tm .assert_series_equal (result , expected )
1280
1289
1281
1290
@pytest .mark .xfail (reason = "Unknown: Omitted test_ in name prior." )
1282
1291
def test_assignment_not_inplace (self ):
@@ -1505,7 +1514,7 @@ def test_date_boolean(self, engine, parser):
1505
1514
parser = parser ,
1506
1515
)
1507
1516
expec = df .dates1 < "20130101"
1508
- tm .assert_series_equal (res , expec , check_names = False )
1517
+ tm .assert_series_equal (res , expec )
1509
1518
1510
1519
def test_simple_in_ops (self , engine , parser ):
1511
1520
if parser != "python" :
@@ -1620,7 +1629,7 @@ def test_unary_functions(self, fn, engine, parser):
1620
1629
got = self .eval (expr , engine = engine , parser = parser )
1621
1630
with np .errstate (all = "ignore" ):
1622
1631
expect = getattr (np , fn )(a )
1623
- tm .assert_series_equal (got , expect , check_names = False )
1632
+ tm .assert_series_equal (got , expect )
1624
1633
1625
1634
@pytest .mark .parametrize ("fn" , _binary_math_ops )
1626
1635
def test_binary_functions (self , fn , engine , parser ):
@@ -1637,7 +1646,7 @@ def test_binary_functions(self, fn, engine, parser):
1637
1646
got = self .eval (expr , engine = engine , parser = parser )
1638
1647
with np .errstate (all = "ignore" ):
1639
1648
expect = getattr (np , fn )(a , b )
1640
- tm .assert_almost_equal (got , expect , check_names = False )
1649
+ tm .assert_almost_equal (got , expect )
1641
1650
1642
1651
def test_df_use_case (self , engine , parser ):
1643
1652
df = DataFrame (
@@ -1653,8 +1662,8 @@ def test_df_use_case(self, engine, parser):
1653
1662
inplace = True ,
1654
1663
)
1655
1664
got = df .e
1656
- expect = np .arctan2 (np .sin (df .a ), df .b )
1657
- tm .assert_series_equal (got , expect , check_names = False )
1665
+ expect = np .arctan2 (np .sin (df .a ), df .b ). rename ( "e" )
1666
+ tm .assert_series_equal (got , expect )
1658
1667
1659
1668
def test_df_arithmetic_subexpression (self , engine , parser ):
1660
1669
df = DataFrame (
@@ -1665,8 +1674,8 @@ def test_df_arithmetic_subexpression(self, engine, parser):
1665
1674
)
1666
1675
df .eval ("e = sin(a + b)" , engine = engine , parser = parser , inplace = True )
1667
1676
got = df .e
1668
- expect = np .sin (df .a + df .b )
1669
- tm .assert_series_equal (got , expect , check_names = False )
1677
+ expect = np .sin (df .a + df .b ). rename ( "e" )
1678
+ tm .assert_series_equal (got , expect )
1670
1679
1671
1680
@pytest .mark .parametrize (
1672
1681
"dtype, expect_dtype" ,
@@ -1690,10 +1699,10 @@ def test_result_types(self, dtype, expect_dtype, engine, parser):
1690
1699
assert df .a .dtype == dtype
1691
1700
df .eval ("b = sin(a)" , engine = engine , parser = parser , inplace = True )
1692
1701
got = df .b
1693
- expect = np .sin (df .a )
1702
+ expect = np .sin (df .a ). rename ( "b" )
1694
1703
assert expect .dtype == got .dtype
1695
1704
assert expect_dtype == got .dtype
1696
- tm .assert_series_equal (got , expect , check_names = False )
1705
+ tm .assert_series_equal (got , expect )
1697
1706
1698
1707
def test_undefined_func (self , engine , parser ):
1699
1708
df = DataFrame ({"a" : np .random .default_rng (2 ).standard_normal (10 )})
@@ -1898,10 +1907,6 @@ def test_equals_various(other):
1898
1907
df = DataFrame ({"A" : ["a" , "b" , "c" ]}, dtype = object )
1899
1908
result = df .eval (f"A == { other } " )
1900
1909
expected = Series ([False , False , False ], name = "A" )
1901
- if USE_NUMEXPR :
1902
- # https://github.com/pandas-dev/pandas/issues/10239
1903
- # lose name with numexpr engine. Remove when that's fixed.
1904
- expected .name = None
1905
1910
tm .assert_series_equal (result , expected )
1906
1911
1907
1912
0 commit comments