Skip to content

Commit 1743a58

Browse files
fix tests
1 parent bf69392 commit 1743a58

File tree

2 files changed

+127
-142
lines changed

2 files changed

+127
-142
lines changed

pandas/tests/computation/test_eval.py

-134
Original file line numberDiff line numberDiff line change
@@ -1978,140 +1978,6 @@ def test_eval_no_support_column_name(request, column):
19781978
tm.assert_frame_equal(result, expected)
19791979

19801980

1981-
def test_query_on_column_name_with_hashtag_character():
1982-
# GH 59285
1983-
df = DataFrame((1, 2, 3), columns=["a#"])
1984-
result = df.query("`a#` < 2")
1985-
expected = df[df["a#"] < 2]
1986-
tm.assert_frame_equal(result, expected)
1987-
1988-
1989-
def test_query_on_expr_with_comment():
1990-
# GH 59285
1991-
df = DataFrame((1, 2, 3), columns=["a#"])
1992-
result = df.query("`a#` < 2 # This is a comment")
1993-
expected = df[df["a#"] < 2]
1994-
tm.assert_frame_equal(result, expected)
1995-
1996-
1997-
def test_query_on_expr_with_column_name_with_backtick_and_hash():
1998-
# GH 59285
1999-
df = DataFrame((1, 2, 3), columns=["a`#b"])
2000-
result = df.query("`a``#b` < 2")
2001-
expected = df[df["a`#b"] < 2]
2002-
tm.assert_frame_equal(result, expected)
2003-
2004-
2005-
def test_query_on_expr_with_column_name_with_backtick():
2006-
# GH 59285
2007-
df = DataFrame({"a`b": (1, 2, 3), "ab": (4, 5, 6)})
2008-
result = df.query("`a``b` < 2")
2009-
# Note: Formatting checks may wrongly consider the above ``inline code``.
2010-
expected = df[df["a`b"] < 2]
2011-
tm.assert_frame_equal(result, expected)
2012-
2013-
2014-
def test_query_on_expr_with_string_with_backticks():
2015-
# GH 59285
2016-
df = DataFrame(("`", "`````", "``````````"), columns=["#backticks"])
2017-
result = df.query("'```' < `#backticks`")
2018-
expected = df["```" < df["#backticks"]]
2019-
tm.assert_frame_equal(result, expected)
2020-
2021-
2022-
def test_query_on_expr_with_string_with_backticked_substring_same_as_column_name():
2023-
# GH 59285
2024-
df = DataFrame(("`", "`````", "``````````"), columns=["#backticks"])
2025-
result = df.query("'`#backticks`' < `#backticks`")
2026-
expected = df["`#backticks`" < df["#backticks"]]
2027-
tm.assert_frame_equal(result, expected)
2028-
2029-
2030-
@pytest.mark.parametrize(
2031-
"col1,col2,expr",
2032-
[
2033-
("it's", "that's", "`it's` < `that's`"),
2034-
('it"s', 'that"s', '`it"s` < `that"s`'),
2035-
("it's", 'that\'s "nice"', "`it's` < `that's \"nice\"`"),
2036-
("it's", "that's #cool", "`it's` < `that's #cool` # This is a comment"),
2037-
],
2038-
)
2039-
def test_query_on_column_names_with_special_characters(col1, col2, expr):
2040-
# GH 59285
2041-
df = DataFrame(
2042-
[
2043-
{col1: 1, col2: 2},
2044-
{col1: 3, col2: 4},
2045-
{col1: -1, col2: -2},
2046-
{col1: -3, col2: -4},
2047-
]
2048-
)
2049-
result = df.query(expr)
2050-
expected = df[df[col1] < df[col2]]
2051-
tm.assert_frame_equal(result, expected)
2052-
2053-
2054-
def test_query_on_expr_with_no_backticks():
2055-
# GH 59285
2056-
df = DataFrame(("aaa", "vvv", "zzz"), columns=["column_name"])
2057-
result = df.query("'value' < column_name")
2058-
expected = df["value" < df["column_name"]]
2059-
tm.assert_frame_equal(result, expected)
2060-
2061-
2062-
def test_query_on_expr_with_no_quotes_and_backtick_is_unmatched():
2063-
# GH 59285
2064-
df = DataFrame((1, 5, 10), columns=["column-name"])
2065-
with pytest.raises(SyntaxError, match="invalid syntax"):
2066-
df.query("5 < `column-name")
2067-
2068-
2069-
def test_query_on_expr_with_no_quotes_and_backtick_is_matched():
2070-
# GH 59285
2071-
df = DataFrame((1, 5, 10), columns=["column-name"])
2072-
result = df.query("5 < `column-name`")
2073-
expected = df[5 < df["column-name"]]
2074-
tm.assert_frame_equal(result, expected)
2075-
2076-
2077-
def test_query_on_expr_with_backtick_opened_before_quote_and_backtick_is_unmatched():
2078-
# GH 59285
2079-
df = DataFrame((1, 5, 10), columns=["It's"])
2080-
with pytest.raises(SyntaxError, match="unterminated string literal"):
2081-
df.query("5 < `It's")
2082-
2083-
2084-
def test_query_on_expr_with_backtick_opened_before_quote_and_backtick_is_matched():
2085-
# GH 59285
2086-
df = DataFrame((1, 5, 10), columns=["It's"])
2087-
result = df.query("5 < `It's`")
2088-
expected = df[5 < df["It's"]]
2089-
tm.assert_frame_equal(result, expected)
2090-
2091-
2092-
def test_query_on_expr_with_quote_opened_before_backtick_and_quote_is_unmatched():
2093-
# GH 59285
2094-
df = DataFrame(("aaa", "vvv", "zzz"), columns=["column-name"])
2095-
with pytest.raises(SyntaxError, match="unterminated string literal"):
2096-
df.query("`column-name` < 'It`s that\\'s \"quote\" #hash")
2097-
2098-
2099-
def test_query_on_expr_with_quote_opened_before_backtick_and_quote_is_matched_at_end():
2100-
# GH 59285
2101-
df = DataFrame(("aaa", "vvv", "zzz"), columns=["column-name"])
2102-
result = df.query("`column-name` < 'It`s that\\'s \"quote\" #hash'")
2103-
expected = df[df["column-name"] < 'It`s that\'s "quote" #hash']
2104-
tm.assert_frame_equal(result, expected)
2105-
2106-
2107-
def test_query_on_expr_with_quote_opened_before_backtick_and_quote_is_matched_in_mid():
2108-
# GH 59285
2109-
df = DataFrame(("aaa", "vvv", "zzz"), columns=["column-name"])
2110-
result = df.query("'It`s that\\'s \"quote\" #hash' < `column-name`")
2111-
expected = df['It`s that\'s "quote" #hash' < df["column-name"]]
2112-
tm.assert_frame_equal(result, expected)
2113-
2114-
21151981
def test_set_inplace():
21161982
# https://github.com/pandas-dev/pandas/issues/47449
21171983
# Ensure we don't only update the DataFrame inplace, but also the actual

pandas/tests/frame/test_query_eval.py

+127-8
Original file line numberDiff line numberDiff line change
@@ -1341,20 +1341,139 @@ def test_missing_attribute(self, df):
13411341
with pytest.raises(AttributeError, match=message):
13421342
df.eval("@pd.thing")
13431343

1344-
def test_failing_quote(self, df):
1345-
msg = r"(Could not convert ).*( to a valid Python identifier.)"
1346-
with pytest.raises(SyntaxError, match=msg):
1347-
df.query("`it's` > `that's`")
1344+
def test_quote(self, df):
1345+
res = df.query("`it's` > `that's`")
1346+
expect = df[df["it's"] > df["that's"]]
1347+
tm.assert_frame_equal(res, expect)
13481348

13491349
def test_failing_character_outside_range(self, df):
13501350
msg = r"(Could not convert ).*( to a valid Python identifier.)"
13511351
with pytest.raises(SyntaxError, match=msg):
13521352
df.query("`☺` > 4")
13531353

1354-
def test_failing_hashtag(self, df):
1355-
msg = "Failed to parse backticks"
1356-
with pytest.raises(SyntaxError, match=msg):
1357-
df.query("`foo#bar` > 4")
1354+
def test_hashtag(self, df):
1355+
res = df.query("`foo#bar` > 4")
1356+
expect = df[df["foo#bar"] > 4]
1357+
tm.assert_frame_equal(res, expect)
1358+
1359+
def test_expr_with_column_name_with_hashtag_character(self):
1360+
# GH 59285
1361+
df = DataFrame((1, 2, 3), columns=["a#"])
1362+
result = df.query("`a#` < 2")
1363+
expected = df[df["a#"] < 2]
1364+
tm.assert_frame_equal(result, expected)
1365+
1366+
def test_expr_with_comment(self):
1367+
# GH 59285
1368+
df = DataFrame((1, 2, 3), columns=["a#"])
1369+
result = df.query("`a#` < 2 # This is a comment")
1370+
expected = df[df["a#"] < 2]
1371+
tm.assert_frame_equal(result, expected)
1372+
1373+
def test_expr_with_column_name_with_backtick_and_hash(self):
1374+
# GH 59285
1375+
df = DataFrame((1, 2, 3), columns=["a`#b"])
1376+
result = df.query("`a``#b` < 2")
1377+
expected = df[df["a`#b"] < 2]
1378+
tm.assert_frame_equal(result, expected)
1379+
1380+
def test_expr_with_column_name_with_backtick(self):
1381+
# GH 59285
1382+
df = DataFrame({"a`b": (1, 2, 3), "ab": (4, 5, 6)})
1383+
result = df.query("`a``b` < 2")
1384+
# Note: Formatting checks may wrongly consider the above ``inline code``.
1385+
expected = df[df["a`b"] < 2]
1386+
tm.assert_frame_equal(result, expected)
1387+
1388+
def test_expr_with_string_with_backticks(self):
1389+
# GH 59285
1390+
df = DataFrame(("`", "`````", "``````````"), columns=["#backticks"])
1391+
result = df.query("'```' < `#backticks`")
1392+
expected = df["```" < df["#backticks"]]
1393+
tm.assert_frame_equal(result, expected)
1394+
1395+
def test_expr_with_string_with_backticked_substring_same_as_column_name(self):
1396+
# GH 59285
1397+
df = DataFrame(("`", "`````", "``````````"), columns=["#backticks"])
1398+
result = df.query("'`#backticks`' < `#backticks`")
1399+
expected = df["`#backticks`" < df["#backticks"]]
1400+
tm.assert_frame_equal(result, expected)
1401+
1402+
@pytest.mark.parametrize(
1403+
"col1,col2,expr",
1404+
[
1405+
("it's", "that's", "`it's` < `that's`"),
1406+
('it"s', 'that"s', '`it"s` < `that"s`'),
1407+
("it's", 'that\'s "nice"', "`it's` < `that's \"nice\"`"),
1408+
("it's", "that's #cool", "`it's` < `that's #cool` # This is a comment"),
1409+
],
1410+
)
1411+
def test_expr_with_column_names_with_special_characters(self, col1, col2, expr):
1412+
# GH 59285
1413+
df = DataFrame(
1414+
[
1415+
{col1: 1, col2: 2},
1416+
{col1: 3, col2: 4},
1417+
{col1: -1, col2: -2},
1418+
{col1: -3, col2: -4},
1419+
]
1420+
)
1421+
result = df.query(expr)
1422+
expected = df[df[col1] < df[col2]]
1423+
tm.assert_frame_equal(result, expected)
1424+
1425+
def test_expr_with_no_backticks(self):
1426+
# GH 59285
1427+
df = DataFrame(("aaa", "vvv", "zzz"), columns=["column_name"])
1428+
result = df.query("'value' < column_name")
1429+
expected = df["value" < df["column_name"]]
1430+
tm.assert_frame_equal(result, expected)
1431+
1432+
def test_expr_with_no_quotes_and_backtick_is_unmatched(self):
1433+
# GH 59285
1434+
df = DataFrame((1, 5, 10), columns=["column-name"])
1435+
with pytest.raises(SyntaxError, match="invalid syntax"):
1436+
df.query("5 < `column-name")
1437+
1438+
def test_expr_with_no_quotes_and_backtick_is_matched(self):
1439+
# GH 59285
1440+
df = DataFrame((1, 5, 10), columns=["column-name"])
1441+
result = df.query("5 < `column-name`")
1442+
expected = df[5 < df["column-name"]]
1443+
tm.assert_frame_equal(result, expected)
1444+
1445+
def test_expr_with_backtick_opened_before_quote_and_backtick_is_unmatched(self):
1446+
# GH 59285
1447+
df = DataFrame((1, 5, 10), columns=["It's"])
1448+
with pytest.raises(SyntaxError, match="unterminated string literal"):
1449+
df.query("5 < `It's")
1450+
1451+
def test_expr_with_backtick_opened_before_quote_and_backtick_is_matched(self):
1452+
# GH 59285
1453+
df = DataFrame((1, 5, 10), columns=["It's"])
1454+
result = df.query("5 < `It's`")
1455+
expected = df[5 < df["It's"]]
1456+
tm.assert_frame_equal(result, expected)
1457+
1458+
def test_expr_with_quote_opened_before_backtick_and_quote_is_unmatched(self):
1459+
# GH 59285
1460+
df = DataFrame(("aaa", "vvv", "zzz"), columns=["column-name"])
1461+
with pytest.raises(SyntaxError, match="unterminated string literal"):
1462+
df.query("`column-name` < 'It`s that\\'s \"quote\" #hash")
1463+
1464+
def test_expr_with_quote_opened_before_backtick_and_quote_is_matched_at_end(self):
1465+
# GH 59285
1466+
df = DataFrame(("aaa", "vvv", "zzz"), columns=["column-name"])
1467+
result = df.query("`column-name` < 'It`s that\\'s \"quote\" #hash'")
1468+
expected = df[df["column-name"] < 'It`s that\'s "quote" #hash']
1469+
tm.assert_frame_equal(result, expected)
1470+
1471+
def test_expr_with_quote_opened_before_backtick_and_quote_is_matched_in_mid(self):
1472+
# GH 59285
1473+
df = DataFrame(("aaa", "vvv", "zzz"), columns=["column-name"])
1474+
result = df.query("'It`s that\\'s \"quote\" #hash' < `column-name`")
1475+
expected = df['It`s that\'s "quote" #hash' < df["column-name"]]
1476+
tm.assert_frame_equal(result, expected)
13581477

13591478
def test_call_non_named_expression(self, df):
13601479
"""

0 commit comments

Comments
 (0)