Skip to content

Commit 0a4fe49

Browse files
committed
Fixed #38419 - BUG: set_index screws up the dtypes on empty DataFrames
1 parent 2deca14 commit 0a4fe49

File tree

1 file changed

+31
-31
lines changed

1 file changed

+31
-31
lines changed

pandas/tests/frame/methods/test_set_index.py

+31-31
Original file line numberDiff line numberDiff line change
@@ -52,10 +52,10 @@ def test_set_index_empty_dataframe(self):
5252
df1 = DataFrame(
5353
{"a": Series(dtype="datetime64[ns]"), "b": Series(dtype="int64"), "c": []}
5454
)
55-
56-
df2 = df1.set_index(['a', 'b'])
55+
56+
df2 = df1.set_index(["a", "b"])
5757
result = df2.index.to_frame().dtypes
58-
expected = df1[['a', 'b']].dtypes
58+
expected = df1[["a", "b"]].dtypes
5959
tm.assert_series_equal(result, expected)
6060

6161
def test_set_index_multiindexcolumns(self):
@@ -154,9 +154,9 @@ def test_set_index_cast(self):
154154
tm.assert_frame_equal(df, df2)
155155

156156
# A has duplicate values, C does not
157-
@ pytest.mark.parametrize("keys", ["A", "C", ["A", "B"], ("tuple", "as", "label")])
158-
@ pytest.mark.parametrize("inplace", [True, False])
159-
@ pytest.mark.parametrize("drop", [True, False])
157+
@pytest.mark.parametrize("keys", ["A", "C", ["A", "B"], ("tuple", "as", "label")])
158+
@pytest.mark.parametrize("inplace", [True, False])
159+
@pytest.mark.parametrize("drop", [True, False])
160160
def test_set_index_drop_inplace(self, frame_of_index_cols, drop, inplace, keys):
161161
df = frame_of_index_cols
162162

@@ -177,8 +177,8 @@ def test_set_index_drop_inplace(self, frame_of_index_cols, drop, inplace, keys):
177177
tm.assert_frame_equal(result, expected)
178178

179179
# A has duplicate values, C does not
180-
@ pytest.mark.parametrize("keys", ["A", "C", ["A", "B"], ("tuple", "as", "label")])
181-
@ pytest.mark.parametrize("drop", [True, False])
180+
@pytest.mark.parametrize("keys", ["A", "C", ["A", "B"], ("tuple", "as", "label")])
181+
@pytest.mark.parametrize("drop", [True, False])
182182
def test_set_index_append(self, frame_of_index_cols, drop, keys):
183183
df = frame_of_index_cols
184184

@@ -194,8 +194,8 @@ def test_set_index_append(self, frame_of_index_cols, drop, keys):
194194
tm.assert_frame_equal(result, expected)
195195

196196
# A has duplicate values, C does not
197-
@ pytest.mark.parametrize("keys", ["A", "C", ["A", "B"], ("tuple", "as", "label")])
198-
@ pytest.mark.parametrize("drop", [True, False])
197+
@pytest.mark.parametrize("keys", ["A", "C", ["A", "B"], ("tuple", "as", "label")])
198+
@pytest.mark.parametrize("drop", [True, False])
199199
def test_set_index_append_to_multiindex(self, frame_of_index_cols, drop, keys):
200200
# append to existing multiindex
201201
df = frame_of_index_cols.set_index(["D"], drop=drop, append=True)
@@ -219,7 +219,7 @@ def test_set_index_after_mutation(self):
219219
# MultiIndex constructor does not work directly on Series -> lambda
220220
# Add list-of-list constructor because list is ambiguous -> lambda
221221
# also test index name if append=True (name is duplicate here for B)
222-
@ pytest.mark.parametrize(
222+
@pytest.mark.parametrize(
223223
"box",
224224
[
225225
Series,
@@ -230,10 +230,10 @@ def test_set_index_after_mutation(self):
230230
lambda x: MultiIndex.from_arrays([x]),
231231
],
232232
)
233-
@ pytest.mark.parametrize(
233+
@pytest.mark.parametrize(
234234
"append, index_name", [(True, None), (True, "B"), (True, "test"), (False, None)]
235235
)
236-
@ pytest.mark.parametrize("drop", [True, False])
236+
@pytest.mark.parametrize("drop", [True, False])
237237
def test_set_index_pass_single_array(
238238
self, frame_of_index_cols, drop, append, index_name, box
239239
):
@@ -262,14 +262,14 @@ def test_set_index_pass_single_array(
262262

263263
# MultiIndex constructor does not work directly on Series -> lambda
264264
# also test index name if append=True (name is duplicate here for A & B)
265-
@ pytest.mark.parametrize(
265+
@pytest.mark.parametrize(
266266
"box", [Series, Index, np.array, list, lambda x: MultiIndex.from_arrays([x])]
267267
)
268-
@ pytest.mark.parametrize(
268+
@pytest.mark.parametrize(
269269
"append, index_name",
270270
[(True, None), (True, "A"), (True, "B"), (True, "test"), (False, None)],
271271
)
272-
@ pytest.mark.parametrize("drop", [True, False])
272+
@pytest.mark.parametrize("drop", [True, False])
273273
def test_set_index_pass_arrays(
274274
self, frame_of_index_cols, drop, append, index_name, box
275275
):
@@ -293,7 +293,7 @@ def test_set_index_pass_arrays(
293293
# MultiIndex constructor does not work directly on Series -> lambda
294294
# We also emulate a "constructor" for the label -> lambda
295295
# also test index name if append=True (name is duplicate here for A)
296-
@ pytest.mark.parametrize(
296+
@pytest.mark.parametrize(
297297
"box2",
298298
[
299299
Series,
@@ -305,7 +305,7 @@ def test_set_index_pass_arrays(
305305
lambda x: x.name,
306306
],
307307
)
308-
@ pytest.mark.parametrize(
308+
@pytest.mark.parametrize(
309309
"box1",
310310
[
311311
Series,
@@ -317,10 +317,10 @@ def test_set_index_pass_arrays(
317317
lambda x: x.name,
318318
],
319319
)
320-
@ pytest.mark.parametrize(
320+
@pytest.mark.parametrize(
321321
"append, index_name", [(True, None), (True, "A"), (True, "test"), (False, None)]
322322
)
323-
@ pytest.mark.parametrize("drop", [True, False])
323+
@pytest.mark.parametrize("drop", [True, False])
324324
def test_set_index_pass_arrays_duplicate(
325325
self, frame_of_index_cols, drop, append, index_name, box1, box2
326326
):
@@ -353,8 +353,8 @@ def test_set_index_pass_arrays_duplicate(
353353
expected = expected.set_index([keys[1]], drop=drop, append=True)
354354
tm.assert_frame_equal(result, expected)
355355

356-
@ pytest.mark.parametrize("append", [True, False])
357-
@ pytest.mark.parametrize("drop", [True, False])
356+
@pytest.mark.parametrize("append", [True, False])
357+
@pytest.mark.parametrize("drop", [True, False])
358358
def test_set_index_pass_multiindex(self, frame_of_index_cols, drop, append):
359359
df = frame_of_index_cols
360360
keys = MultiIndex.from_arrays([df["A"], df["B"]], names=["A", "B"])
@@ -516,8 +516,8 @@ def test_set_index_verify_integrity(self, frame_of_index_cols):
516516
with pytest.raises(ValueError, match="Index has duplicate keys"):
517517
df.set_index([df["A"], df["A"]], verify_integrity=True)
518518

519-
@ pytest.mark.parametrize("append", [True, False])
520-
@ pytest.mark.parametrize("drop", [True, False])
519+
@pytest.mark.parametrize("append", [True, False])
520+
@pytest.mark.parametrize("drop", [True, False])
521521
def test_set_index_raise_keys(self, frame_of_index_cols, drop, append):
522522
df = frame_of_index_cols
523523

@@ -538,9 +538,9 @@ def test_set_index_raise_keys(self, frame_of_index_cols, drop, append):
538538
with pytest.raises(KeyError, match=msg):
539539
df.set_index(["A", df["A"], tuple(df["A"])], drop=drop, append=append)
540540

541-
@ pytest.mark.parametrize("append", [True, False])
542-
@ pytest.mark.parametrize("drop", [True, False])
543-
@ pytest.mark.parametrize("box", [set], ids=["set"])
541+
@pytest.mark.parametrize("append", [True, False])
542+
@pytest.mark.parametrize("drop", [True, False])
543+
@pytest.mark.parametrize("box", [set], ids=["set"])
544544
def test_set_index_raise_on_type(self, frame_of_index_cols, box, drop, append):
545545
df = frame_of_index_cols
546546

@@ -554,14 +554,14 @@ def test_set_index_raise_on_type(self, frame_of_index_cols, box, drop, append):
554554
df.set_index(["A", df["A"], box(df["A"])], drop=drop, append=append)
555555

556556
# MultiIndex constructor does not work directly on Series -> lambda
557-
@ pytest.mark.parametrize(
557+
@pytest.mark.parametrize(
558558
"box",
559559
[Series, Index, np.array, iter, lambda x: MultiIndex.from_arrays([x])],
560560
ids=["Series", "Index", "np.array", "iter", "MultiIndex"],
561561
)
562-
@ pytest.mark.parametrize("length", [4, 6], ids=["too_short", "too_long"])
563-
@ pytest.mark.parametrize("append", [True, False])
564-
@ pytest.mark.parametrize("drop", [True, False])
562+
@pytest.mark.parametrize("length", [4, 6], ids=["too_short", "too_long"])
563+
@pytest.mark.parametrize("append", [True, False])
564+
@pytest.mark.parametrize("drop", [True, False])
565565
def test_set_index_raise_on_len(
566566
self, frame_of_index_cols, box, length, drop, append
567567
):

0 commit comments

Comments
 (0)