Skip to content

Commit a76df79

Browse files
sumanau7TomAugspurger
authored andcommitted
Preserve index when setting new column on empty dataframe. (#26471)
1 parent 8f6118c commit a76df79

File tree

3 files changed

+14
-7
lines changed

3 files changed

+14
-7
lines changed

pandas/core/frame.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -3098,7 +3098,7 @@ def _ensure_valid_index(self, value):
30983098
passed value.
30993099
"""
31003100
# GH5632, make sure that we are a Series convertible
3101-
if not len(self.index) and is_list_like(value):
3101+
if not len(self.index) and is_list_like(value) and len(value):
31023102
try:
31033103
value = Series(value)
31043104
except (ValueError, NotImplementedError, TypeError):

pandas/tests/frame/test_indexing.py

+8
Original file line numberDiff line numberDiff line change
@@ -821,6 +821,14 @@ def test_setitem_empty_frame_with_boolean(self, dtype, kwargs):
821821
df[df > df2] = 47
822822
assert_frame_equal(df, df2)
823823

824+
def test_setitem_with_empty_listlike(self):
825+
# GH #17101
826+
index = pd.Index([], name="idx")
827+
result = pd.DataFrame(columns=["A"], index=index)
828+
result["A"] = []
829+
expected = pd.DataFrame(columns=["A"], index=index)
830+
tm.assert_index_equal(result.index, expected.index)
831+
824832
def test_setitem_scalars_no_index(self):
825833
# GH16823 / 17894
826834
df = DataFrame()

pandas/tests/indexing/test_partial.py

+5-6
Original file line numberDiff line numberDiff line change
@@ -442,10 +442,10 @@ def test_partial_set_empty_frame(self):
442442
# these work as they don't really change
443443
# anything but the index
444444
# GH5632
445-
expected = DataFrame(columns=["foo"], index=Index([], dtype="int64"))
445+
expected = DataFrame(columns=["foo"], index=Index([], dtype="object"))
446446

447447
def f():
448-
df = DataFrame()
448+
df = DataFrame(index=Index([], dtype="object"))
449449
df["foo"] = Series([], dtype="object")
450450
return df
451451

@@ -469,22 +469,21 @@ def f():
469469
expected["foo"] = expected["foo"].astype("float64")
470470

471471
def f():
472-
df = DataFrame()
472+
df = DataFrame(index=Index([], dtype="int64"))
473473
df["foo"] = []
474474
return df
475475

476476
tm.assert_frame_equal(f(), expected)
477477

478478
def f():
479-
df = DataFrame()
479+
df = DataFrame(index=Index([], dtype="int64"))
480480
df["foo"] = Series(np.arange(len(df)), dtype="float64")
481481
return df
482482

483483
tm.assert_frame_equal(f(), expected)
484484

485485
def f():
486-
df = DataFrame()
487-
tm.assert_index_equal(df.index, Index([], dtype="object"))
486+
df = DataFrame(index=Index([], dtype="int64"))
488487
df["foo"] = range(len(df))
489488
return df
490489

0 commit comments

Comments
 (0)