@@ -856,45 +856,29 @@ def test_loc_setitem_with_scalar_index(self, indexer, value):
856
856
857
857
assert is_scalar (result ) and result == "Z"
858
858
859
- def test_loc_setitem_missing_columns_scalar_index_list_value (self ):
860
- # GH 26534
861
- df = pd .DataFrame ([[1 , 2 ], [3 , 4 ], [5 , 6 ]], columns = ["A" , "B" ])
862
- df .loc [1 , ["C" , "D" ]] = [7 , 8 ]
863
- expected = pd .DataFrame (
864
- [[1 , 2 , np .nan , np .nan ], [3 , 4 , 7 , 8 ], [5 , 6 , np .nan , np .nan ]],
865
- columns = ["A" , "B" , "C" , "D" ],
866
- )
867
- tm .assert_frame_equal (df , expected )
868
-
869
- def test_loc_setitem_missing_columns_full_index_dataframe_value (self ):
870
- # GH 26534
871
- df = pd .DataFrame ([[1 , 2 ], [3 , 4 ], [5 , 6 ]], columns = ["A" , "B" ])
872
- df2 = pd .DataFrame ([[7 , 8 ], [9 , 10 ], [11 , 12 ]], columns = ["A" , "C" ])
873
- df .loc [:, ["A" , "C" ]] = df2
874
- expected = pd .DataFrame (
875
- [[7 , 2 , 8 ], [9 , 4 , 10 ], [11 , 6 , 12 ]], columns = ["A" , "B" , "C" ]
876
- )
877
- tm .assert_frame_equal (df , expected )
878
-
879
- def test_loc_setitem_missing_columns_list_index_scalar_value (self ):
880
- # GH 26534
881
- df = pd .DataFrame ([[1 , 2 ], [3 , 4 ], [5 , 6 ]], columns = ["A" , "B" ])
882
- df .loc [[0 , 2 ], ["B" , "C" , "D" ]] = 9
883
- expected = pd .DataFrame (
884
- [[1 , 9 , 9 , 9 ], [3 , 4 , np .nan , np .nan ], [5 , 9 , 9 , 9 ]],
885
- columns = ["A" , "B" , "C" , "D" ],
886
- )
887
- tm .assert_frame_equal (df , expected )
888
-
889
- def test_loc_setitem_missing_columns_range_index_2dlist_value (self ):
859
+ @pytest .mark .parametrize (
860
+ "index,box" ,
861
+ [
862
+ ((1 , ["C" , "D" ]), [7 , 8 ]),
863
+ (
864
+ (slice (None , None , None ), ["A" , "C" ]),
865
+ pd .DataFrame ([[7 , 8 ], [9 , 10 ], [11 , 12 ]], columns = ["A" , "C" ]),
866
+ ),
867
+ (([0 , 2 ], ["B" , "C" , "D" ]), 9 ),
868
+ ((slice (1 , 3 , None ), ["B" , "C" , "D" ]), [[7 , 8 , 9 ], [10 , 11 , 12 ]]),
869
+ ],
870
+ )
871
+ def test_loc_setitem_missing_columns (self , index , box ):
890
872
# GH 26534
891
873
df = pd .DataFrame ([[1 , 2 ], [3 , 4 ], [5 , 6 ]], columns = ["A" , "B" ])
892
- df .loc [1 :3 , ["B" , "C" , "D" ]] = [[7 , 8 , 9 ], [10 , 11 , 12 ]]
893
- expected = pd .DataFrame (
894
- [[1 , 2 , np .nan , np .nan ], [3 , 7 , 8 , 9 ], [5 , 10 , 11 , 12 ]],
895
- columns = ["A" , "B" , "C" , "D" ],
896
- )
897
- tm .assert_frame_equal (df , expected )
874
+ result = df .copy ()
875
+ result .loc [index ] = box
876
+ expected = df .copy ()
877
+ for col in index [1 ]:
878
+ if col not in expected .columns :
879
+ expected [col ] = np .nan
880
+ expected .loc [index ] = box
881
+ tm .assert_frame_equal (result , expected )
898
882
899
883
def test_loc_coercion (self ):
900
884
0 commit comments