Skip to content

Commit 2f6a0c9

Browse files
topper-123jreback
authored andcommitted
BUG: constructing a DataFrame using range doesn't work (#26343)
1 parent 681a22c commit 2f6a0c9

File tree

3 files changed

+28
-5
lines changed

3 files changed

+28
-5
lines changed

doc/source/whatsnew/v0.25.0.rst

+1
Original file line numberDiff line numberDiff line change
@@ -415,6 +415,7 @@ Reshaping
415415
- Bug in :func:`pivot_table` where columns with ``NaN`` values are dropped even if ``dropna`` argument is ``False``, when the ``aggfunc`` argument contains a ``list`` (:issue:`22159`)
416416
- Bug in :func:`concat` where the resulting ``freq`` of two :class:`DatetimeIndex` with the same ``freq`` would be dropped (:issue:`3232`).
417417
- Bug in :func:`merge` where merging with equivalent Categorical dtypes was raising an error (:issue:`22501`)
418+
- bug in :class:`DataFrame` instantiating with a ``range`` (e.g. ``pd.DataFrame(range(3))``) raised an error (:issue:`26342`).
418419
- Bug in :class:`DataFrame` constructor when passing non-empty tuples would cause a segmentation fault (:issue:`25691`)
419420
- Bug in :func:`pandas.cut` where large bins could incorrectly raise an error due to an integer overflow (:issue:`26045`)
420421
- Bug in :func:`DataFrame.sort_index` where an error is thrown when a multi-indexed DataFrame is sorted on all levels with the initial level sorted last (:issue:`26053`)

pandas/core/dtypes/cast.py

+2-2
Original file line numberDiff line numberDiff line change
@@ -35,8 +35,8 @@
3535
def maybe_convert_platform(values):
3636
""" try to do platform conversion, allow ndarray or list here """
3737

38-
if isinstance(values, (list, tuple)):
39-
values = construct_1d_object_array_from_listlike(list(values))
38+
if isinstance(values, (list, tuple, range)):
39+
values = construct_1d_object_array_from_listlike(values)
4040
if getattr(values, 'dtype', None) == np.object_:
4141
if hasattr(values, '_values'):
4242
values = values._values

pandas/tests/frame/test_constructors.py

+25-3
Original file line numberDiff line numberDiff line change
@@ -33,11 +33,13 @@ class TestDataFrameConstructors(TestData):
3333
lambda: DataFrame(()),
3434
lambda: DataFrame([]),
3535
lambda: DataFrame((x for x in [])),
36+
lambda: DataFrame(range(0)),
3637
lambda: DataFrame(data=None),
3738
lambda: DataFrame(data={}),
3839
lambda: DataFrame(data=()),
3940
lambda: DataFrame(data=[]),
40-
lambda: DataFrame(data=(x for x in []))
41+
lambda: DataFrame(data=(x for x in [])),
42+
lambda: DataFrame(data=range(0)),
4143
])
4244
def test_empty_constructor(self, constructor):
4345
expected = DataFrame()
@@ -999,6 +1001,17 @@ def __len__(self, n):
9991001
array.array('i', range(10))])
10001002
tm.assert_frame_equal(result, expected, check_dtype=False)
10011003

1004+
def test_constructor_range(self):
1005+
# GH26342
1006+
result = DataFrame(range(10))
1007+
expected = DataFrame(list(range(10)))
1008+
tm.assert_frame_equal(result, expected)
1009+
1010+
def test_constructor_list_of_ranges(self):
1011+
result = DataFrame([range(10), range(10)])
1012+
expected = DataFrame([list(range(10)), list(range(10))])
1013+
tm.assert_frame_equal(result, expected)
1014+
10021015
def test_constructor_iterable(self):
10031016
# GH 21987
10041017
class Iter:
@@ -1011,9 +1024,13 @@ def __iter__(self):
10111024
tm.assert_frame_equal(result, expected)
10121025

10131026
def test_constructor_iterator(self):
1027+
result = DataFrame(iter(range(10)))
1028+
expected = DataFrame(list(range(10)))
1029+
tm.assert_frame_equal(result, expected)
10141030

1031+
def test_constructor_list_of_iterators(self):
1032+
result = DataFrame([iter(range(10)), iter(range(10))])
10151033
expected = DataFrame([list(range(10)), list(range(10))])
1016-
result = DataFrame([range(10), range(10)])
10171034
tm.assert_frame_equal(result, expected)
10181035

10191036
def test_constructor_generator(self):
@@ -2251,8 +2268,13 @@ def test_to_frame_with_falsey_names(self):
22512268

22522269
@pytest.mark.parametrize('dtype', [None, 'uint8', 'category'])
22532270
def test_constructor_range_dtype(self, dtype):
2254-
# GH 16804
22552271
expected = DataFrame({'A': [0, 1, 2, 3, 4]}, dtype=dtype or 'int64')
2272+
2273+
# GH 26342
2274+
result = DataFrame(range(5), columns=['A'], dtype=dtype)
2275+
tm.assert_frame_equal(result, expected)
2276+
2277+
# GH 16804
22562278
result = DataFrame({'A': range(5)}, dtype=dtype)
22572279
tm.assert_frame_equal(result, expected)
22582280

0 commit comments

Comments
 (0)