@@ -808,45 +808,29 @@ def test_loc_setitem_with_scalar_index(self, indexer, value):
808
808
809
809
assert is_scalar (result ) and result == "Z"
810
810
811
- def test_loc_setitem_missing_columns_scalar_index_list_value (self ):
812
- # GH 26534
813
- df = pd .DataFrame ([[1 , 2 ], [3 , 4 ], [5 , 6 ]], columns = ["A" , "B" ])
814
- df .loc [1 , ["C" , "D" ]] = [7 , 8 ]
815
- expected = pd .DataFrame (
816
- [[1 , 2 , np .nan , np .nan ], [3 , 4 , 7 , 8 ], [5 , 6 , np .nan , np .nan ]],
817
- columns = ["A" , "B" , "C" , "D" ],
818
- )
819
- tm .assert_frame_equal (df , expected )
820
-
821
- def test_loc_setitem_missing_columns_full_index_dataframe_value (self ):
822
- # GH 26534
823
- df = pd .DataFrame ([[1 , 2 ], [3 , 4 ], [5 , 6 ]], columns = ["A" , "B" ])
824
- df2 = pd .DataFrame ([[7 , 8 ], [9 , 10 ], [11 , 12 ]], columns = ["A" , "C" ])
825
- df .loc [:, ["A" , "C" ]] = df2
826
- expected = pd .DataFrame (
827
- [[7 , 2 , 8 ], [9 , 4 , 10 ], [11 , 6 , 12 ]], columns = ["A" , "B" , "C" ]
828
- )
829
- tm .assert_frame_equal (df , expected )
830
-
831
- def test_loc_setitem_missing_columns_list_index_scalar_value (self ):
832
- # GH 26534
833
- df = pd .DataFrame ([[1 , 2 ], [3 , 4 ], [5 , 6 ]], columns = ["A" , "B" ])
834
- df .loc [[0 , 2 ], ["B" , "C" , "D" ]] = 9
835
- expected = pd .DataFrame (
836
- [[1 , 9 , 9 , 9 ], [3 , 4 , np .nan , np .nan ], [5 , 9 , 9 , 9 ]],
837
- columns = ["A" , "B" , "C" , "D" ],
838
- )
839
- tm .assert_frame_equal (df , expected )
840
-
841
- def test_loc_setitem_missing_columns_range_index_2dlist_value (self ):
811
+ @pytest .mark .parametrize (
812
+ "index,box" ,
813
+ [
814
+ ((1 , ["C" , "D" ]), [7 , 8 ]),
815
+ (
816
+ (slice (None , None , None ), ["A" , "C" ]),
817
+ pd .DataFrame ([[7 , 8 ], [9 , 10 ], [11 , 12 ]], columns = ["A" , "C" ]),
818
+ ),
819
+ (([0 , 2 ], ["B" , "C" , "D" ]), 9 ),
820
+ ((slice (1 , 3 , None ), ["B" , "C" , "D" ]), [[7 , 8 , 9 ], [10 , 11 , 12 ]]),
821
+ ],
822
+ )
823
+ def test_loc_setitem_missing_columns (self , index , box ):
842
824
# GH 26534
843
825
df = pd .DataFrame ([[1 , 2 ], [3 , 4 ], [5 , 6 ]], columns = ["A" , "B" ])
844
- df .loc [1 :3 , ["B" , "C" , "D" ]] = [[7 , 8 , 9 ], [10 , 11 , 12 ]]
845
- expected = pd .DataFrame (
846
- [[1 , 2 , np .nan , np .nan ], [3 , 7 , 8 , 9 ], [5 , 10 , 11 , 12 ]],
847
- columns = ["A" , "B" , "C" , "D" ],
848
- )
849
- tm .assert_frame_equal (df , expected )
826
+ result = df .copy ()
827
+ result .loc [index ] = box
828
+ expected = df .copy ()
829
+ for col in index [1 ]:
830
+ if col not in expected .columns :
831
+ expected [col ] = np .nan
832
+ expected .loc [index ] = box
833
+ tm .assert_frame_equal (result , expected )
850
834
851
835
def test_loc_coercion (self ):
852
836
0 commit comments