33import numpy as np
44import pytest
55
6- from pandas ._config import using_string_dtype
7-
86import pandas as pd
97from pandas import (
108 DataFrame ,
2119def df ():
2220 res = DataFrame (
2321 np .random .default_rng (2 ).standard_normal ((10 , 4 )),
24- columns = Index (list ("ABCD" ), dtype = object ),
22+ columns = Index (list ("ABCD" )),
2523 index = date_range ("2000-01-01" , periods = 10 , freq = "B" ),
2624 )
2725 res ["id1" ] = (res ["A" ] > 0 ).astype (np .int64 )
@@ -83,7 +81,6 @@ def test_default_col_names(self, df):
8381 result2 = df .melt (id_vars = ["id1" , "id2" ])
8482 assert result2 .columns .tolist () == ["id1" , "id2" , "variable" , "value" ]
8583
86- @pytest .mark .xfail (using_string_dtype (), reason = "TODO(infer_string)" )
8784 def test_value_vars (self , df ):
8885 result3 = df .melt (id_vars = ["id1" , "id2" ], value_vars = "A" )
8986 assert len (result3 ) == 10
@@ -100,7 +97,6 @@ def test_value_vars(self, df):
10097 )
10198 tm .assert_frame_equal (result4 , expected4 )
10299
103- @pytest .mark .xfail (using_string_dtype (), reason = "TODO(infer_string)" )
104100 @pytest .mark .parametrize ("type_" , (tuple , list , np .array ))
105101 def test_value_vars_types (self , type_ , df ):
106102 # GH 15348
@@ -178,7 +174,6 @@ def test_tuple_vars_fail_with_multiindex(self, id_vars, value_vars, df1):
178174 with pytest .raises (ValueError , match = msg ):
179175 df1 .melt (id_vars = id_vars , value_vars = value_vars )
180176
181- @pytest .mark .xfail (using_string_dtype (), reason = "TODO(infer_string)" )
182177 def test_custom_var_name (self , df , var_name ):
183178 result5 = df .melt (var_name = var_name )
184179 assert result5 .columns .tolist () == ["var" , "value" ]
@@ -206,7 +201,6 @@ def test_custom_var_name(self, df, var_name):
206201 )
207202 tm .assert_frame_equal (result9 , expected9 )
208203
209- @pytest .mark .xfail (using_string_dtype (), reason = "TODO(infer_string)" )
210204 def test_custom_value_name (self , df , value_name ):
211205 result10 = df .melt (value_name = value_name )
212206 assert result10 .columns .tolist () == ["variable" , "val" ]
@@ -236,7 +230,6 @@ def test_custom_value_name(self, df, value_name):
236230 )
237231 tm .assert_frame_equal (result14 , expected14 )
238232
239- @pytest .mark .xfail (using_string_dtype (), reason = "TODO(infer_string)" )
240233 def test_custom_var_and_value_name (self , df , value_name , var_name ):
241234 result15 = df .melt (var_name = var_name , value_name = value_name )
242235 assert result15 .columns .tolist () == ["var" , "val" ]
@@ -361,14 +354,15 @@ def test_melt_missing_columns_raises(self):
361354 with pytest .raises (KeyError , match = msg ):
362355 df .melt (["A" ], ["F" ], col_level = 0 )
363356
364- @pytest .mark .xfail (using_string_dtype (), reason = "TODO(infer_string)" )
365357 def test_melt_mixed_int_str_id_vars (self ):
366358 # GH 29718
367359 df = DataFrame ({0 : ["foo" ], "a" : ["bar" ], "b" : [1 ], "d" : [2 ]})
368360 result = melt (df , id_vars = [0 , "a" ], value_vars = ["b" , "d" ])
369361 expected = DataFrame (
370362 {0 : ["foo" ] * 2 , "a" : ["bar" ] * 2 , "variable" : list ("bd" ), "value" : [1 , 2 ]}
371363 )
364+ # the df's columns are mixed type and thus object -> preserves object dtype
365+ expected ["variable" ] = expected ["variable" ].astype (object )
372366 tm .assert_frame_equal (result , expected )
373367
374368 def test_melt_mixed_int_str_value_vars (self ):
@@ -1222,12 +1216,10 @@ def test_raise_of_column_name_value(self):
12221216 ):
12231217 df .melt (id_vars = "value" , value_name = "value" )
12241218
1225- @pytest .mark .xfail (using_string_dtype (), reason = "TODO(infer_string)" , strict = False )
1226- @pytest .mark .parametrize ("dtype" , ["O" , "string" ])
1227- def test_missing_stubname (self , dtype ):
1219+ def test_missing_stubname (self , any_string_dtype ):
12281220 # GH46044
12291221 df = DataFrame ({"id" : ["1" , "2" ], "a-1" : [100 , 200 ], "a-2" : [300 , 400 ]})
1230- df = df .astype ({"id" : dtype })
1222+ df = df .astype ({"id" : any_string_dtype })
12311223 result = wide_to_long (
12321224 df ,
12331225 stubnames = ["a" , "b" ],
@@ -1243,12 +1235,13 @@ def test_missing_stubname(self, dtype):
12431235 {"a" : [100 , 200 , 300 , 400 ], "b" : [np .nan ] * 4 },
12441236 index = index ,
12451237 )
1246- new_level = expected .index .levels [0 ].astype (dtype )
1238+ new_level = expected .index .levels [0 ].astype (any_string_dtype )
1239+ if any_string_dtype == "object" :
1240+ new_level = expected .index .levels [0 ].astype ("str" )
12471241 expected .index = expected .index .set_levels (new_level , level = 0 )
12481242 tm .assert_frame_equal (result , expected )
12491243
12501244
1251- @pytest .mark .xfail (using_string_dtype (), reason = "TODO(infer_string)" )
12521245def test_wide_to_long_pyarrow_string_columns ():
12531246 # GH 57066
12541247 pytest .importorskip ("pyarrow" )
@@ -1267,7 +1260,7 @@ def test_wide_to_long_pyarrow_string_columns():
12671260 )
12681261 expected = DataFrame (
12691262 [[1 , 1 ], [1 , 1 ], [1 , 2 ]],
1270- columns = Index (["D" , "R" ], dtype = object ),
1263+ columns = Index (["D" , "R" ]),
12711264 index = pd .MultiIndex .from_arrays (
12721265 [
12731266 [1 , 1 , 1 ],
0 commit comments