@@ -962,6 +962,118 @@ def test_get_level_values(self, index, name, level):
962962 result = expected .get_level_values (level )
963963 tm .assert_index_equal (result , expected )
964964
965+ def test_get_level_values_boolean_name (self ):
966+ # GH#62175
967+ idx = Index ([1 , 2 , 3 ], name = True )
968+ result = idx .get_level_values (True )
969+ tm .assert_index_equal (result , idx )
970+
971+ idx = Index ([1 , 2 , 3 ], name = False )
972+ result = idx .get_level_values (False )
973+ tm .assert_index_equal (result , idx )
974+
975+ idx = Index ([1 , 2 , 3 ], name = True )
976+ msg = r"Requested level \(False\) does not match index name \(True\)"
977+ with pytest .raises (KeyError , match = msg ):
978+ idx .get_level_values (False )
979+
980+ msg = r"Too many levels: Index has only 1 level"
981+ with pytest .raises (IndexError , match = msg ):
982+ idx .get_level_values (1 )
983+
984+ def test_get_level_values_na_types (self ):
985+ # GH#62175
986+ idx = Index ([1 , 2 , 3 ], name = pd .NA )
987+ result = idx .get_level_values (pd .NA )
988+ tm .assert_index_equal (result , idx )
989+
990+ msg = r"Requested level \(.+\) does not match index name \(.+\)"
991+ with pytest .raises (KeyError , match = msg ):
992+ idx .get_level_values (np .nan )
993+
994+ with pytest .raises (KeyError , match = msg ):
995+ idx .get_level_values (None )
996+
997+ idx = Index ([1 , 2 , 3 ], name = np .nan )
998+ result = idx .get_level_values (np .nan )
999+ tm .assert_index_equal (result , idx )
1000+
1001+ with pytest .raises (KeyError , match = msg ):
1002+ idx .get_level_values (pd .NA )
1003+
1004+ with pytest .raises (KeyError , match = msg ):
1005+ idx .get_level_values (None )
1006+
1007+ idx = Index ([1 , 2 , 3 ], name = None )
1008+ result = idx .get_level_values (0 )
1009+ tm .assert_index_equal (result , idx )
1010+
1011+ result = idx .get_level_values (- 1 )
1012+ tm .assert_index_equal (result , idx )
1013+
1014+ with pytest .raises (KeyError , match = msg ):
1015+ idx .get_level_values (pd .NA )
1016+
1017+ with pytest .raises (KeyError , match = msg ):
1018+ idx .get_level_values (np .nan )
1019+
1020+ idx = Index ([1 , 2 , 3 ], name = pd .NaT )
1021+ result = idx .get_level_values (pd .NaT )
1022+ tm .assert_index_equal (result , idx )
1023+
1024+ with pytest .raises (KeyError , match = msg ):
1025+ idx .get_level_values (np .nan )
1026+
1027+ with pytest .raises (KeyError , match = msg ):
1028+ idx .get_level_values (pd .NA )
1029+
1030+ def test_get_level_values_integer_name_vs_position (self ):
1031+ # GH#62175
1032+ idx = Index ([1 , 2 , 3 ], name = 0 )
1033+ result = idx .get_level_values (0 )
1034+ tm .assert_index_equal (result , idx )
1035+
1036+ result = idx .get_level_values (- 1 )
1037+ tm .assert_index_equal (result , idx )
1038+
1039+ idx = Index ([1 , 2 , 3 ], name = 5 )
1040+ result = idx .get_level_values (5 )
1041+ tm .assert_index_equal (result , idx )
1042+
1043+ result = idx .get_level_values (0 )
1044+ tm .assert_index_equal (result , idx )
1045+
1046+ msg = r"Too many levels: Index has only 1 level, not 2"
1047+ with pytest .raises (IndexError , match = msg ):
1048+ idx .get_level_values (1 )
1049+
1050+ msg = r"Too many levels: Index has only 1 level, not 1"
1051+ with pytest .raises (IndexError , match = msg ):
1052+ idx .get_level_values (- 2 )
1053+
1054+ def test_get_level_values_error_messages (self ):
1055+ # GH#62175
1056+ idx = Index ([1 , 2 , 3 ], name = "foo" )
1057+
1058+ msg = r"Requested level \(bar\) does not match index name \(foo\)"
1059+ with pytest .raises (KeyError , match = msg ):
1060+ idx .get_level_values ("bar" )
1061+
1062+ msg = r"Too many levels: Index has only 1 level, not 2"
1063+ with pytest .raises (IndexError , match = msg ):
1064+ idx .get_level_values (1 )
1065+
1066+ msg = r"Too many levels: Index has only 1 level, not 1"
1067+ with pytest .raises (IndexError , match = msg ):
1068+ idx .get_level_values (- 2 )
1069+
1070+ msg = r"Requested level \(.+\) does not match index name \(foo\)"
1071+ with pytest .raises (KeyError , match = msg ):
1072+ idx .get_level_values (pd .NA )
1073+
1074+ with pytest .raises (KeyError , match = msg ):
1075+ idx .get_level_values (np .nan )
1076+
9651077 def test_slice_keep_name (self ):
9661078 index = Index (["a" , "b" ], name = "asdf" )
9671079 assert index .name == index [1 :].name
0 commit comments