@@ -865,43 +865,59 @@ def test_from_tuples_different_lengths_gh60695():
865
865
866
866
GH#60695
867
867
"""
868
- # Test case 1: Original issue example with string values
868
+ # Test case 1: Basic string tuples
869
869
tuples = [("l1" ,), ("l1" , "l2" )]
870
- result = pd . MultiIndex .from_tuples (tuples )
871
- expected = pd . MultiIndex .from_tuples ([("l1" , np .nan ), ("l1" , "l2" )])
872
- tm .assert_index_equal (result , expected , exact = True )
870
+ result = MultiIndex .from_tuples (tuples )
871
+ expected = MultiIndex .from_tuples ([("l1" , np .nan ), ("l1" , "l2" )])
872
+ tm .assert_index_equal (result , expected )
873
873
874
- # Test case 2: Series construction with tuple keys
874
+ # Test case 2: Series with tuple keys
875
875
s = pd .Series ({("l1" ,): "v1" , ("l1" , "l2" ): "v2" })
876
876
expected = pd .Series (
877
877
["v1" , "v2" ],
878
- index = pd . MultiIndex .from_tuples ([("l1" , np .nan ), ("l1" , "l2" )])
878
+ index = MultiIndex .from_tuples ([("l1" , np .nan ), ("l1" , "l2" )])
879
879
)
880
- tm .assert_series_equal (s , expected , check_index_type = True )
880
+ tm .assert_series_equal (s , expected )
881
881
882
- # Test case 3: Handle numeric values
882
+ # Test case 3: Numeric tuples
883
883
tuples = [(1 ,), (1 , 2 )]
884
- result = pd . MultiIndex .from_tuples (tuples )
885
- expected = pd . MultiIndex .from_tuples ([(1 , np .nan ), (1 , 2 )])
886
- tm .assert_index_equal (result , expected , exact = True )
884
+ result = MultiIndex .from_tuples (tuples )
885
+ expected = MultiIndex .from_tuples ([(1 , np .nan ), (1 , 2 )])
886
+ tm .assert_index_equal (result , expected )
887
887
888
- # Test case 4: Mixed types (strings and integers)
888
+ # Test case 4: Mixed types
889
889
tuples = [(1 , "a" ), (1 ,), (2 , "b" , "c" )]
890
- result = pd . MultiIndex .from_tuples (tuples )
891
- expected = pd . MultiIndex .from_tuples ([
890
+ result = MultiIndex .from_tuples (tuples )
891
+ expected = MultiIndex .from_tuples ([
892
892
(1 , "a" , np .nan ),
893
893
(1 , np .nan , np .nan ),
894
894
(2 , "b" , "c" )
895
895
])
896
- tm .assert_index_equal (result , expected , exact = True )
896
+ tm .assert_index_equal (result , expected )
897
897
898
- # Test case 5: Empty tuples
899
- tuples = []
898
+ # Test case 5: Empty input with names
899
+ empty_idx = MultiIndex .from_tuples ([], names = ["a" , "b" ])
900
+ assert empty_idx .names == ["a" , "b" ]
901
+ assert len (empty_idx ) == 0
902
+
903
+ # Test case 6: Empty input without names
900
904
with pytest .raises (TypeError , match = "Cannot infer number of levels" ):
901
- pd . MultiIndex .from_tuples (tuples )
905
+ MultiIndex .from_tuples ([] )
902
906
903
- # Test case 6: Single level consistency
904
- tuples = [("a" ,)]
905
- result = pd .MultiIndex .from_tuples (tuples )
906
- expected = pd .MultiIndex .from_tuples ([("a" ,)])
907
- tm .assert_index_equal (result , expected , exact = True )
907
+ # Test case 7: None values
908
+ tuples = [(1 , None ), (1 , 2 )]
909
+ result = MultiIndex .from_tuples (tuples )
910
+ expected = MultiIndex .from_tuples ([(1 , np .nan ), (1 , 2 )])
911
+ tm .assert_index_equal (result , expected )
912
+
913
+ # Test case 8: DataFrame with tuple index
914
+ df = pd .DataFrame (
915
+ {"col" : ["v1" , "v2" ]},
916
+ index = MultiIndex .from_tuples ([("l1" ,), ("l1" , "l2" )])
917
+ )
918
+ expected_index = MultiIndex .from_tuples ([("l1" , np .nan ), ("l1" , "l2" )])
919
+ expected_df = pd .DataFrame (
920
+ {"col" : ["v1" , "v2" ]},
921
+ index = expected_index
922
+ )
923
+ tm .assert_frame_equal (df , expected_df )
0 commit comments