diff --git a/doc/source/reference/testing.rst b/doc/source/reference/testing.rst index 0d702dd4e702d..f91db4600daec 100644 --- a/doc/source/reference/testing.rst +++ b/doc/source/reference/testing.rst @@ -26,6 +26,7 @@ Exceptions and warnings errors.AbstractMethodError errors.AccessorRegistrationWarning + errors.DataError errors.DtypeWarning errors.DuplicateLabelError errors.EmptyDataError diff --git a/doc/source/whatsnew/v1.5.0.rst b/doc/source/whatsnew/v1.5.0.rst index 581473d3c4798..00f4954d8ffe2 100644 --- a/doc/source/whatsnew/v1.5.0.rst +++ b/doc/source/whatsnew/v1.5.0.rst @@ -151,6 +151,7 @@ Other enhancements - A :class:`errors.PerformanceWarning` is now thrown when using ``string[pyarrow]`` dtype with methods that don't dispatch to ``pyarrow.compute`` methods (:issue:`42613`) - Added ``numeric_only`` argument to :meth:`Resampler.sum`, :meth:`Resampler.prod`, :meth:`Resampler.min`, :meth:`Resampler.max`, :meth:`Resampler.first`, and :meth:`Resampler.last` (:issue:`46442`) - ``times`` argument in :class:`.ExponentialMovingWindow` now accepts ``np.timedelta64`` (:issue:`47003`) +- :class:`DataError` now exposed in ``pandas.errors`` (:issue:`27656`) .. --------------------------------------------------------------------------- .. _whatsnew_150.notable_bug_fixes: diff --git a/pandas/core/apply.py b/pandas/core/apply.py index c04d0821fffdc..b891a532a4512 100644 --- a/pandas/core/apply.py +++ b/pandas/core/apply.py @@ -33,6 +33,7 @@ Axis, NDFrameT, ) +from pandas.errors import DataError from pandas.util._decorators import cache_readonly from pandas.util._exceptions import find_stack_level @@ -51,7 +52,6 @@ from pandas.core.algorithms import safe_sort from pandas.core.base import ( - DataError, SelectionMixin, SpecificationError, ) diff --git a/pandas/core/base.py b/pandas/core/base.py index 12ab942e70574..38cf41a626deb 100644 --- a/pandas/core/base.py +++ b/pandas/core/base.py @@ -176,10 +176,6 @@ def __setattr__(self, key: str, value): object.__setattr__(self, key, value) -class DataError(Exception): - pass - - class SpecificationError(Exception): pass diff --git a/pandas/core/groupby/groupby.py b/pandas/core/groupby/groupby.py index f7c89b6e7dc49..2ae00b788b427 100644 --- a/pandas/core/groupby/groupby.py +++ b/pandas/core/groupby/groupby.py @@ -53,7 +53,10 @@ class providing the base-class of operations. npt, ) from pandas.compat.numpy import function as nv -from pandas.errors import AbstractMethodError +from pandas.errors import ( + AbstractMethodError, + DataError, +) from pandas.util._decorators import ( Appender, Substitution, @@ -89,7 +92,6 @@ class providing the base-class of operations. ExtensionArray, ) from pandas.core.base import ( - DataError, PandasObject, SelectionMixin, ) diff --git a/pandas/core/resample.py b/pandas/core/resample.py index 362f61d25ac34..fd331fef32703 100644 --- a/pandas/core/resample.py +++ b/pandas/core/resample.py @@ -34,7 +34,10 @@ npt, ) from pandas.compat.numpy import function as nv -from pandas.errors import AbstractMethodError +from pandas.errors import ( + AbstractMethodError, + DataError, +) from pandas.util._decorators import ( Appender, Substitution, @@ -50,10 +53,7 @@ import pandas.core.algorithms as algos from pandas.core.apply import ResamplerWindowApply -from pandas.core.base import ( - DataError, - PandasObject, -) +from pandas.core.base import PandasObject import pandas.core.common as com from pandas.core.generic import ( NDFrame, diff --git a/pandas/core/window/rolling.py b/pandas/core/window/rolling.py index 9617e27cc2e4b..ad6f0863449b6 100644 --- a/pandas/core/window/rolling.py +++ b/pandas/core/window/rolling.py @@ -33,6 +33,7 @@ ) from pandas.compat._optional import import_optional_dependency from pandas.compat.numpy import function as nv +from pandas.errors import DataError from pandas.util._decorators import doc from pandas.util._exceptions import find_stack_level @@ -54,10 +55,7 @@ from pandas.core.algorithms import factorize from pandas.core.apply import ResamplerWindowApply from pandas.core.arrays import ExtensionArray -from pandas.core.base import ( - DataError, - SelectionMixin, -) +from pandas.core.base import SelectionMixin import pandas.core.common as com from pandas.core.indexers.objects import ( BaseIndexer, diff --git a/pandas/errors/__init__.py b/pandas/errors/__init__.py index 44f999cb1296a..daef5a38c33c2 100644 --- a/pandas/errors/__init__.py +++ b/pandas/errors/__init__.py @@ -236,3 +236,11 @@ class InvalidIndexError(Exception): .. versionadded:: 1.1.0 """ + + +class DataError(Exception): + """ + Exception raised when trying to perform a ohlc on a non-numnerical column. + Or, it can be raised when trying to apply a function to a non-numerical + column on a rolling window. + """ diff --git a/pandas/tests/test_errors.py b/pandas/tests/test_errors.py index 6207b886b95c7..a1ce5b7a239fe 100644 --- a/pandas/tests/test_errors.py +++ b/pandas/tests/test_errors.py @@ -19,6 +19,7 @@ "MergeError", "OptionError", "NumbaUtilError", + "DataError", ], ) def test_exception_importable(exc): diff --git a/pandas/tests/window/test_dtypes.py b/pandas/tests/window/test_dtypes.py index 161976a6112a5..52011a2d5f760 100644 --- a/pandas/tests/window/test_dtypes.py +++ b/pandas/tests/window/test_dtypes.py @@ -1,6 +1,8 @@ import numpy as np import pytest +from pandas.errors import DataError + from pandas.core.dtypes.common import pandas_dtype from pandas import ( @@ -9,7 +11,6 @@ Series, ) import pandas._testing as tm -from pandas.core.base import DataError # gh-12373 : rolling functions error on float32 data # make sure rolling functions works for different dtypes