Skip to content

Commit

Permalink
BUG: Switched shapes in ValueError msg in DataFrame construct (#20742) (
Browse files Browse the repository at this point in the history
#24725)

* BUG: Switched shapes in ValueError msg in DataFrame construct (#20742)

* DOC: improved docu of the value error msg changes

TST: adjusted panel test for change in value error msg in block manager
TST: adjusted dataframe init test from json for change in value error
     msg in block manager

* BUG: printed a list instead of a tuple in the ValueError msg

* CLN: removed unnecessary list comprehension

* DOC: Improved whatsnew message

* CLN: readded deleted tests

CLN: removed issue number above new tests

* Bug: No changes for panel

* DOC: improved whatsnew message for reversed shapes

* DOC: improved comments and whatsnew message for df construction error

* DOC: improved whatsnew message
  • Loading branch information
meiermark authored and TomAugspurger committed Jan 18, 2019
1 parent 2bbe418 commit 08f92c4
Show file tree
Hide file tree
Showing 4 changed files with 29 additions and 9 deletions.
2 changes: 2 additions & 0 deletions doc/source/whatsnew/v0.24.0.rst
Original file line number Diff line number Diff line change
Expand Up @@ -1817,6 +1817,7 @@ Reshaping
- Bug in :func:`DataFrame.unstack` where a ``ValueError`` was raised when unstacking timezone aware values (:issue:`18338`)
- Bug in :func:`DataFrame.stack` where timezone aware values were converted to timezone naive values (:issue:`19420`)
- Bug in :func:`merge_asof` where a ``TypeError`` was raised when ``by_col`` were timezone aware values (:issue:`21184`)
- Bug showing an incorrect shape when throwing error during ``DataFrame`` construction. (:issue:`20742`)

.. _whatsnew_0240.bug_fixes.sparse:

Expand Down Expand Up @@ -1854,6 +1855,7 @@ Other

- Bug where C variables were declared with external linkage causing import errors if certain other C libraries were imported before Pandas. (:issue:`24113`)


.. _whatsnew_0.24.0.contributors:

Contributors
Expand Down
10 changes: 9 additions & 1 deletion pandas/core/internals/managers.py
Original file line number Diff line number Diff line change
Expand Up @@ -1674,7 +1674,15 @@ def create_block_manager_from_arrays(arrays, names, axes):
def construction_error(tot_items, block_shape, axes, e=None):
""" raise a helpful message about our construction """
passed = tuple(map(int, [tot_items] + list(block_shape)))
implied = tuple(map(int, [len(ax) for ax in axes]))
# Correcting the user facing error message during dataframe construction
if len(passed) <= 2:
passed = passed[::-1]

implied = tuple(len(ax) for ax in axes)
# Correcting the user facing error message during dataframe construction
if len(implied) <= 2:
implied = implied[::-1]

if passed == implied and e is not None:
raise e
if block_shape[0] == 0:
Expand Down
24 changes: 17 additions & 7 deletions pandas/tests/frame/test_constructors.py
Original file line number Diff line number Diff line change
Expand Up @@ -386,25 +386,35 @@ def test_constructor_error_msgs(self):
'B': ['a', 'b', 'c']})

# wrong size ndarray, GH 3105
msg = r"Shape of passed values is \(3, 4\), indices imply \(3, 3\)"
msg = r"Shape of passed values is \(4, 3\), indices imply \(3, 3\)"
with pytest.raises(ValueError, match=msg):
DataFrame(np.arange(12).reshape((4, 3)),
columns=['foo', 'bar', 'baz'],
index=pd.date_range('2000-01-01', periods=3))

arr = np.array([[4, 5, 6]])
msg = r"Shape of passed values is \(1, 3\), indices imply \(1, 4\)"
with pytest.raises(ValueError, match=msg):
DataFrame(index=[0], columns=range(0, 4), data=arr)

arr = np.array([4, 5, 6])
msg = r"Shape of passed values is \(3, 1\), indices imply \(1, 4\)"
with pytest.raises(ValueError, match=msg):
DataFrame(index=[0], columns=range(0, 4), data=arr)

# higher dim raise exception
with pytest.raises(ValueError, match='Must pass 2-d input'):
DataFrame(np.zeros((3, 3, 3)), columns=['A', 'B', 'C'], index=[1])

# wrong size axis labels
msg = ("Shape of passed values "
r"is \(3, 2\), indices "
r"imply \(3, 1\)")
r"is \(2, 3\), indices "
r"imply \(1, 3\)")
with pytest.raises(ValueError, match=msg):
DataFrame(np.random.rand(2, 3), columns=['A', 'B', 'C'], index=[1])

msg = ("Shape of passed values "
r"is \(3, 2\), indices "
r"is \(2, 3\), indices "
r"imply \(2, 2\)")
with pytest.raises(ValueError, match=msg):
DataFrame(np.random.rand(2, 3), columns=['A', 'B'], index=[1, 2])
Expand Down Expand Up @@ -638,10 +648,10 @@ def _check_basic_constructor(self, empty):
assert frame.values.dtype == np.int64

# wrong size axis labels
msg = r'Shape of passed values is \(3, 2\), indices imply \(3, 1\)'
msg = r'Shape of passed values is \(2, 3\), indices imply \(1, 3\)'
with pytest.raises(ValueError, match=msg):
DataFrame(mat, columns=['A', 'B', 'C'], index=[1])
msg = r'Shape of passed values is \(3, 2\), indices imply \(2, 2\)'
msg = r'Shape of passed values is \(2, 3\), indices imply \(2, 2\)'
with pytest.raises(ValueError, match=msg):
DataFrame(mat, columns=['A', 'B'], index=[1, 2])

Expand Down Expand Up @@ -1805,7 +1815,7 @@ def test_from_records_to_records(self):
tm.assert_frame_equal(DataFrame.from_records(arr2), DataFrame(arr2))

# wrong length
msg = r'Shape of passed values is \(3, 2\), indices imply \(3, 1\)'
msg = r'Shape of passed values is \(2, 3\), indices imply \(1, 3\)'
with pytest.raises(ValueError, match=msg):
DataFrame.from_records(arr, index=index[:-1])

Expand Down
2 changes: 1 addition & 1 deletion pandas/tests/io/json/test_pandas.py
Original file line number Diff line number Diff line change
Expand Up @@ -346,7 +346,7 @@ def test_frame_from_json_bad_data(self):
json = StringIO('{"columns":["A","B"],'
'"index":["2","3"],'
'"data":[[1.0,"1"],[2.0,"2"],[null,"3"]]}')
msg = r"Shape of passed values is \(2, 3\), indices imply \(2, 2\)"
msg = r"Shape of passed values is \(3, 2\), indices imply \(2, 2\)"
with pytest.raises(ValueError, match=msg):
read_json(json, orient="split")

Expand Down

0 comments on commit 08f92c4

Please sign in to comment.