Skip to content

Commit b420e84

Browse files
committed
Merge pull request pandas-dev#10943 from ajcr/raise-scalar-dict
BUG: passing columns and dict with scalar values should raise error
2 parents 3db4c4b + d2d9464 commit b420e84

File tree

3 files changed

+19
-1
lines changed

3 files changed

+19
-1
lines changed

doc/source/whatsnew/v0.17.0.txt

+1
Original file line numberDiff line numberDiff line change
@@ -837,3 +837,4 @@ Bug Fixes
837837
- Bug in ``to_json`` which was causing segmentation fault when serializing 0-rank ndarray (:issue:`9576`)
838838
- Bug in plotting functions may raise ``IndexError`` when plotted on ``GridSpec`` (:issue:`10819`)
839839
- Bug in plot result may show unnecessary minor ticklabels (:issue:`10657`)
840+
- Bug when constructing ``DataFrame`` where passing a dictionary with only scalar values and specifying columns did not raise an error (:issue:`10856`)

pandas/core/frame.py

+7-1
Original file line numberDiff line numberDiff line change
@@ -298,13 +298,18 @@ def _init_dict(self, data, index, columns, dtype=None):
298298
if columns is not None:
299299
columns = _ensure_index(columns)
300300

301-
# prefilter if columns passed
301+
# GH10856
302+
# raise ValueError if only scalars in dict
303+
if index is None:
304+
extract_index(list(data.values()))
302305

306+
# prefilter if columns passed
303307
data = dict((k, v) for k, v in compat.iteritems(data)
304308
if k in columns)
305309

306310
if index is None:
307311
index = extract_index(list(data.values()))
312+
308313
else:
309314
index = _ensure_index(index)
310315

@@ -330,6 +335,7 @@ def _init_dict(self, data, index, columns, dtype=None):
330335
v = data[k]
331336
data_names.append(k)
332337
arrays.append(v)
338+
333339
else:
334340
keys = list(data.keys())
335341
if not isinstance(data, OrderedDict):

pandas/tests/test_frame.py

+11
Original file line numberDiff line numberDiff line change
@@ -2762,6 +2762,17 @@ def test_constructor_dict(self):
27622762
frame = DataFrame({'A': [], 'B': []}, columns=['A', 'B'])
27632763
self.assertTrue(frame.index.equals(Index([])))
27642764

2765+
# GH10856
2766+
# dict with scalar values should raise error, even if columns passed
2767+
with tm.assertRaises(ValueError):
2768+
DataFrame({'a': 0.7})
2769+
2770+
with tm.assertRaises(ValueError):
2771+
DataFrame({'a': 0.7}, columns=['a'])
2772+
2773+
with tm.assertRaises(ValueError):
2774+
DataFrame({'a': 0.7}, columns=['b'])
2775+
27652776
def test_constructor_multi_index(self):
27662777
# GH 4078
27672778
# construction error with mi and all-nan frame

0 commit comments

Comments
 (0)