Skip to content

Commit 502b1f3

Browse files
committed
BUG: constructing a frame using range didn't work
1 parent bb0376c commit 502b1f3

File tree

3 files changed

+30
-5
lines changed

3 files changed

+30
-5
lines changed

doc/source/whatsnew/v0.25.0.rst

+3
Original file line numberDiff line numberDiff line change
@@ -258,7 +258,10 @@ Performance Improvements
258258
Bug Fixes
259259
~~~~~~~~~
260260

261+
DataFrame
262+
^^^^^^^^^^^
261263

264+
- Fixed a bug where Constructing a :class:`DataFrame` using a ``range`` (e.g. ``pd.DataFrame(range(3))``) would cause an ``AttributeException`` (:issue:`26342`).
262265

263266
Categorical
264267
^^^^^^^^^^^

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+
#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)