@@ -1070,6 +1070,35 @@ def test_query_string_scalar_variable(self, parser, engine):
1070
1070
r = df .query ("Symbol == @symb" , parser = parser , engine = engine )
1071
1071
tm .assert_frame_equal (e , r )
1072
1072
1073
+ @pytest .mark .parametrize (
1074
+ "in_list" ,
1075
+ [
1076
+ [None , "asdf" , "ghjk" ],
1077
+ ["asdf" , None , "ghjk" ],
1078
+ ["asdf" , "ghjk" , None ],
1079
+ [None , None , "asdf" ],
1080
+ ["asdf" , None , None ],
1081
+ [None , None , None ],
1082
+ ],
1083
+ )
1084
+ def test_query_string_null_elements (self , parser , engine , in_list ):
1085
+ # GITHUB ISSUE #31516
1086
+ skip_if_no_pandas_parser (parser )
1087
+ expected = {
1088
+ i : value
1089
+ for value , i in zip (in_list , range (len (in_list )))
1090
+ if value is not None
1091
+ }
1092
+ df_expected = DataFrame ({"a" : expected })
1093
+ df = DataFrame ({"a" : in_list })
1094
+ res1 = df .query ("a == 'asdf'" , parser = parser , engine = engine )
1095
+ res2 = df [df ["a" ] == "asdf" ]
1096
+ res3 = df .query ("a <= 'asdf'" , parser = parser , engine = engine )
1097
+ tm .assert_frame_equal (res1 , df_expected )
1098
+ tm .assert_frame_equal (res1 , res2 )
1099
+ tm .assert_frame_equal (res1 , res3 )
1100
+ tm .assert_frame_equal (res2 , res3 )
1101
+
1073
1102
1074
1103
class TestDataFrameEvalWithFrame :
1075
1104
@pytest .fixture
0 commit comments