Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

AssertionError creating array with StringDtype instead of StringDtype(), can we have a friendlier error message? #31356

Closed
gerritholl opened this issue Jan 27, 2020 · 1 comment · Fixed by #54721
Labels
Enhancement Error Reporting Incorrect or improved errors from pandas Strings String extension data type and string data

Comments

@gerritholl
Copy link

The following fails with an AssertionError on pandas 1.0.0rc0:

pd.Series(["a", "b"], dtype=pd.StringDtype)

I wrote this by mistake — this works:

pd.Series(["a", "b"], dtype=pd.StringDtype())

When running the former, I get a traceback with an AssertionError:

Traceback (most recent call last):
  File "/media/nas/x21324/miniconda3/envs/py37e/lib/python3.7/site-packages/pandas/core/construction.py", line 534, in _try_cast
    if is_integer_dtype(dtype):
  File "/media/nas/x21324/miniconda3/envs/py37e/lib/python3.7/site-packages/pandas/core/dtypes/common.py", line 827, in is_integer_dtype
    return _is_dtype_type(arr_or_dtype, classes_and_not_datetimelike(np.integer))
  File "/media/nas/x21324/miniconda3/envs/py37e/lib/python3.7/site-packages/pandas/core/dtypes/common.py", line 1732, in _is_dtype_type
    return condition(np.dtype(arr_or_dtype).type)
TypeError: data type not understood

During handling of the above exception, another exception occurred:

Traceback (most recent call last):
  File "mwe18.py", line 2, in <module>
    pd.Series(["a", "b"], dtype=pd.StringDtype)
  File "/media/nas/x21324/miniconda3/envs/py37e/lib/python3.7/site-packages/pandas/core/series.py", line 304, in __init__
    data = sanitize_array(data, index, dtype, copy, raise_cast_failure=True)
  File "/media/nas/x21324/miniconda3/envs/py37e/lib/python3.7/site-packages/pandas/core/construction.py", line 438, in sanitize_array
    subarr = _try_cast(data, dtype, copy, raise_cast_failure)
  File "/media/nas/x21324/miniconda3/envs/py37e/lib/python3.7/site-packages/pandas/core/construction.py", line 562, in _try_cast
    subarr = array_type(arr, dtype=dtype, copy=copy)
  File "/media/nas/x21324/miniconda3/envs/py37e/lib/python3.7/site-packages/pandas/core/arrays/string_.py", line 180, in _from_sequence
    assert dtype == "string"
AssertionError

Coming from numpy, I find it unconventional that the type ending in dtype is not itself a valid dtype, but rather a constructor for such a dtype. Therefore, I would consider that a friendlier error message could be in order (or maybe it should even work).

I'm running pandas 1.0.0rc0 on Python 3.7.6.

The full environment:

# packages in environment at /media/nas/x21324/miniconda3/envs/py37e: # # Name Version Build Channel _libgcc_mutex 0.1 conda_forge conda-forge _openmp_mutex 4.5 0_gnu conda-forge affine 2.3.0 py_0 conda-forge aggdraw 1.3.11 py37hc56bac0_0 conda-forge alabaster 0.7.12 py_0 conda-forge appdirs 1.4.3 pypi_0 pypi arrow-cpp 0.15.1 py37had5782a_4 conda-forge asciitree 0.3.3 py_2 conda-forge attrs 19.3.0 py_0 conda-forge awscli 1.17.8 py37_0 conda-forge babel 2.8.0 py_0 conda-forge backcall 0.1.0 py_0 conda-forge beautifulsoup4 4.8.2 py37_0 conda-forge behave 1.2.6 py37_1000 conda-forge bitstring 3.1.6 pypi_0 pypi bleach 3.1.0 py_0 conda-forge blosc 1.17.0 he1b5a44_1 conda-forge bokeh 1.4.0 py37_0 conda-forge boost-cpp 1.70.0 h8e57a91_2 conda-forge boto3 1.11.8 py_0 conda-forge botocore 1.14.8 py_0 conda-forge brotli 1.0.7 he1b5a44_1000 conda-forge bzip2 1.0.8 h516909a_2 conda-forge c-ares 1.15.0 h516909a_1001 conda-forge ca-certificates 2019.11.28 hecc5488_0 conda-forge cairo 1.16.0 hfb77d84_1002 conda-forge cartopy 0.17.0 py37hc5b2455_1008 conda-forge certifi 2019.11.28 py37_0 conda-forge cffi 1.13.2 py37h8022711_0 conda-forge cfgrib 0.9.7.3 py_0 conda-forge cfitsio 3.470 hb60a0a2_2 conda-forge cftime 1.0.4.2 py37hc1659b7_0 conda-forge chardet 3.0.4 py37_1003 conda-forge click 7.0 py_0 conda-forge click-plugins 1.1.1 py_0 conda-forge cligj 0.5.0 py_0 conda-forge cloudpickle 1.2.2 py_1 conda-forge codecov 2.0.15 py_1 conda-forge colorama 0.4.1 py_0 conda-forge colorcet 2.0.1 py_0 conda-forge configobj 5.0.6 py_0 conda-forge coverage 5.0.3 py37h516909a_0 conda-forge coveralls 1.10.0 py_0 conda-forge cryptography 2.8 py37h72c5cf5_1 conda-forge curl 7.65.3 hf8cf82a_0 conda-forge cycler 0.10.0 py_2 conda-forge cython 0.29.14 py37he1b5a44_0 conda-forge cytoolz 0.10.1 py37h516909a_0 conda-forge dask 2.9.2 py_0 conda-forge dask-core 2.9.2 py_0 conda-forge datashader 0.8.0 py_0 conda-forge datashape 0.5.4 py_1 conda-forge dbus 1.13.6 he372182_0 conda-forge decorator 4.4.1 py_0 conda-forge defusedxml 0.6.0 py_0 conda-forge distributed 2.9.3 py_0 conda-forge docopt 0.6.2 py_1 conda-forge docutils 0.15.2 py37_0 conda-forge double-conversion 3.1.5 he1b5a44_2 conda-forge eccodes 2.14.1 hc4140ea_3 conda-forge entrypoints 0.3 py37_1000 conda-forge expat 2.2.5 he1b5a44_1004 conda-forge fasteners 0.14.1 py_3 conda-forge fcitools 0.1.0.post0.dev5+ga19d0d1 pypi_0 pypi fiona 1.8.13 py37h900e953_0 conda-forge flake8 3.7.9 py37_0 conda-forge fogpy 1.2.0+dev21.g2b0d49d.get.validation.output.for.fog.mask pypi_0 pypi fogtools 0.0.post0.dev13+g735723f.dirty dev_0 fontconfig 2.13.1 h86ecdb6_1001 conda-forge freetype 2.10.0 he983fc9_1 conda-forge freetype-py 2.1.0.post1 py_0 conda-forge freexl 1.0.5 h14c3975_1002 conda-forge fsspec 0.6.2 py_0 conda-forge g2clib 1.6.0 hf3f1b0b_9 conda-forge gdal 3.0.2 py37hbb6b9fb_3 conda-forge geopandas 0.6.2 py_0 conda-forge geos 3.7.2 he1b5a44_2 conda-forge geotiff 1.5.1 hbd99317_7 conda-forge geoviews 1.6.5 py_0 conda-forge geoviews-core 1.6.5 py_0 conda-forge gettext 0.19.8.1 hc5be6a0_1002 conda-forge gflags 2.2.2 he1b5a44_1002 conda-forge giflib 5.1.7 h516909a_1 conda-forge glib 2.58.3 py37h6f030ca_1002 conda-forge glog 0.4.0 he1b5a44_1 conda-forge goesr 0.5.2 pypi_0 pypi grpc-cpp 1.25.0 h5321d42_1 conda-forge gst-plugins-base 1.14.5 h0935bb2_0 conda-forge gstreamer 1.14.5 h36ae1b5_0 conda-forge h5netcdf 0.7.4 py_0 conda-forge h5py 2.10.0 nompi_py37h513d04c_101 conda-forge hdf4 4.2.13 hf30be14_1003 conda-forge hdf5 1.10.5 nompi_h3c11f04_1104 conda-forge hdfeos2 2.20 h64bfcee_1000 conda-forge hdfeos5 5.1.16 h8b6279f_5 conda-forge heapdict 1.0.1 py_0 conda-forge holoviews 1.12.7 py_0 conda-forge icu 64.2 he1b5a44_1 conda-forge idna 2.8 py37_1000 conda-forge imageio 2.6.1 py37_0 conda-forge imagesize 1.2.0 py_0 conda-forge importlib_metadata 1.4.0 py37_0 conda-forge ipdb 0.12.3 py_0 conda-forge ipykernel 5.1.3 py37h5ca1d4c_0 conda-forge ipython 7.11.1 py37h5ca1d4c_0 conda-forge ipython_genutils 0.2.0 py_1 conda-forge ipywidgets 7.5.1 py_0 conda-forge jasper 1.900.1 h07fcdf6_1006 conda-forge jedi 0.15.2 py37_0 conda-forge jinja2 2.10.3 py_0 conda-forge jmespath 0.9.4 py_0 conda-forge jpeg 9c h14c3975_1001 conda-forge json-c 0.13.1 h14c3975_1001 conda-forge jsonschema 3.2.0 py37_0 conda-forge jupyter 1.0.0 py_2 conda-forge jupyter_client 5.3.4 py37_1 conda-forge jupyter_console 6.0.0 py_0 conda-forge jupyter_core 4.6.1 py37_0 conda-forge kealib 1.4.10 h58c409b_1005 conda-forge kiwisolver 1.1.0 py37hc9558a2_0 conda-forge krb5 1.16.4 h2fd8d38_0 conda-forge ld_impl_linux-64 2.33.1 h53a641e_7 conda-forge libaec 1.0.4 hf484d3e_0 conda-forge libblas 3.8.0 14_openblas conda-forge libcblas 3.8.0 14_openblas conda-forge libclang 9.0.1 default_hde54327_0 conda-forge libcurl 7.65.3 hda55be3_0 conda-forge libdap4 3.20.4 hd3bb157_0 conda-forge libedit 3.1.20170329 hf8c457e_1001 conda-forge libevent 2.1.10 h72c5cf5_0 conda-forge libffi 3.2.1 he1b5a44_1006 conda-forge libgcc-ng 9.2.0 h24d8f2e_2 conda-forge libgdal 3.0.2 h5534617_3 conda-forge libgfortran-ng 7.3.0 hdf63c60_4 conda-forge libgomp 9.2.0 h24d8f2e_2 conda-forge libiconv 1.15 h516909a_1005 conda-forge libkml 1.3.0 h4fcabce_1010 conda-forge liblapack 3.8.0 14_openblas conda-forge libllvm8 8.0.1 hc9558a2_0 conda-forge libllvm9 9.0.1 hc9558a2_0 conda-forge libnetcdf 4.7.1 nompi_h94020b1_102 conda-forge libopenblas 0.3.7 h5ec1e0e_6 conda-forge libpng 1.6.37 hed695b0_0 conda-forge libpq 11.5 hd9ab2ff_2 conda-forge libprotobuf 3.10.1 h8b12597_0 conda-forge libsodium 1.0.17 h516909a_0 conda-forge libspatialindex 1.9.3 he1b5a44_1 conda-forge libspatialite 4.3.0a h4f6d029_1032 conda-forge libssh2 1.8.2 h22169c7_2 conda-forge libstdcxx-ng 9.2.0 hdf63c60_2 conda-forge libtiff 0.4.2 pypi_0 pypi libuuid 2.32.1 h14c3975_1000 conda-forge libwebp 1.0.2 hf4e8a37_4 conda-forge libxcb 1.13 h14c3975_1002 conda-forge libxkbcommon 0.9.1 hebb1f50_0 conda-forge libxml2 2.9.10 hee79883_0 conda-forge libxslt 1.1.33 h31b3aaa_0 conda-forge line_profiler 3.0.2 py37hc9558a2_0 conda-forge llvmlite 0.31.0 py37h8b12597_0 conda-forge locket 0.2.0 py_2 conda-forge lxml 4.4.2 py37h7ec2d77_0 conda-forge lz4-c 1.8.3 he1b5a44_1001 conda-forge lzo 2.10 h14c3975_1000 conda-forge markupsafe 1.1.1 py37h516909a_0 conda-forge matplotlib 3.1.2 py37_1 conda-forge matplotlib-base 3.1.2 py37h250f245_1 conda-forge mccabe 0.6.1 py_1 conda-forge mechanicalsoup 0.12.0 py_0 conda-forge mistune 0.8.4 py37h516909a_1000 conda-forge mock 3.0.5 py37_0 conda-forge monotonic 1.5 py_0 conda-forge more-itertools 8.1.0 py_0 conda-forge msgpack-python 0.6.2 py37hc9558a2_0 conda-forge multipledispatch 0.6.0 py_0 conda-forge munch 2.5.0 py_0 conda-forge nbconvert 5.6.1 py37_0 conda-forge nbformat 5.0.4 py_0 conda-forge ncurses 6.1 hf484d3e_1002 conda-forge netcdf4 1.5.3 nompi_py37hfee4bf2_101 conda-forge networkx 2.4 py_0 conda-forge notebook 6.0.3 py37_0 conda-forge nspr 4.24 he1b5a44_0 conda-forge nss 3.47 he751ad9_0 conda-forge numba 0.47.0 py37hb3f55d8_0 conda-forge numcodecs 0.6.4 py37he1b5a44_0 conda-forge numexpr 2.7.1 py37hb3f55d8_0 conda-forge numpy 1.17.5 py37h95a1406_0 conda-forge olefile 0.46 py_0 conda-forge opencv-python 4.1.0.25 pypi_0 pypi openjpeg 2.3.1 h981e76c_3 conda-forge openssl 1.1.1d h516909a_0 conda-forge owslib 0.19.0 py_2 conda-forge packaging 20.0 py_0 conda-forge pandas 1.0.0rc0 pypi_0 pypi pandoc 2.9.1.1 0 conda-forge pandocfilters 1.4.2 py_1 conda-forge param 1.9.2 py_0 conda-forge parquet-cpp 1.5.1 2 conda-forge parse 1.14.0 py_0 conda-forge parse_type 0.5.2 py37_0 conda-forge parso 0.5.2 py_0 conda-forge partd 1.1.0 py_0 conda-forge pcre 8.43 he1b5a44_0 conda-forge pexpect 4.8.0 py37_0 conda-forge pickleshare 0.7.5 py37_1000 conda-forge pillow 7.0.0 py37hefe7db6_0 conda-forge pip 20.0.1 py37_0 conda-forge pixman 0.38.0 h516909a_1003 conda-forge pluggy 0.13.0 py37_0 conda-forge poppler 0.67.0 h14e79db_8 conda-forge poppler-data 0.4.9 1 conda-forge postgresql 11.5 hc63931a_2 conda-forge progressbar2 3.47.0 py_0 conda-forge proj 6.2.1 hc80f0dc_0 conda-forge prometheus_client 0.7.1 py_0 conda-forge prompt_toolkit 2.0.10 py_0 conda-forge psutil 5.6.7 py37h516909a_0 conda-forge pthread-stubs 0.4 h14c3975_1001 conda-forge ptyprocess 0.6.0 py_1001 conda-forge py 1.8.1 py_0 conda-forge pyarrow 0.15.1 py37h8b68381_1 conda-forge pyasn1 0.4.8 py_0 conda-forge pycoast 1.3.2 py_0 conda-forge pycodestyle 2.5.0 py_0 conda-forge pycparser 2.19 py37_1 conda-forge pyct 0.4.6 py_0 conda-forge pyct-core 0.4.6 py_0 conda-forge pydap 3.2.2 py37_1000 conda-forge pydecorate 0.2.1 py_0 conda-forge pyepsg 0.4.0 py_0 conda-forge pyflakes 2.1.1 py_0 conda-forge pygments 2.5.2 py_0 conda-forge pygrib 2.0.4 py37h55c65ac_0 conda-forge pyhdf 0.10.2 py37h3a4e923_0 conda-forge pykdtree 1.3.1 py37hc1659b7_1002 conda-forge pynio 1.5.5 py37h2e5bc1a_7 conda-forge pyopengl 3.1.5 py_0 conda-forge pyopenssl 19.1.0 py37_0 conda-forge pyorbital 1.5.0 pypi_0 pypi pyparsing 2.4.6 py_0 conda-forge pyproj 2.4.2.post1 py37h12732c1_0 conda-forge pyqt 5.12.3 py37hcca6a23_1 conda-forge pyqt5 5.13.1 pypi_0 pypi pyqt5-sip 4.19.18 pypi_0 pypi pyqtgraph 0.11.0rc0 py_0 conda-forge pyqtwebengine 5.12.1 pypi_0 pypi pyresample 1.14.0 py37hb3f55d8_2 conda-forge pyrsistent 0.15.7 py37h516909a_0 conda-forge pyscaffold 3.2.2 py_0 conda-forge pyshp 2.1.0 py_0 conda-forge pysocks 1.7.1 py37_0 conda-forge pyspectral 0.8.9 pypi_0 pypi pytables 3.6.1 py37h9f153d1_1 conda-forge pytest 5.3.4 py37_0 conda-forge pytest-cov 2.8.1 py_0 conda-forge pytest-mock 2.0.0 py37_0 conda-forge pytest-runner 5.2 py_0 conda-forge python 3.7.6 h357f687_2 conda-forge python-dateutil 2.8.1 py_0 conda-forge python-geotiepoints 1.1.8 pypi_0 pypi python-utils 2.3.0 py_1 conda-forge pytz 2019.3 py_0 conda-forge pyviz_comms 0.7.3 py_0 conda-forge pywavelets 1.1.1 py37hc1659b7_0 conda-forge pyyaml 5.2 py37h516909a_0 conda-forge pyzmq 18.1.1 py37h1768529_0 conda-forge qt 5.12.5 hd8c4c69_1 conda-forge qtconsole 4.6.0 py_0 conda-forge quamash 0.6.1 pypi_0 pypi rasterio 1.1.1 py37h900e953_0 conda-forge re2 2020.01.01 he1b5a44_0 conda-forge readline 8.0 hf8c457e_0 conda-forge requests 2.22.0 py37_1 conda-forge rsa 3.4.2 py_1 conda-forge rtree 0.9.3 py37h7b0cdae_0 conda-forge s3fs 0.4.0 py_0 conda-forge s3transfer 0.3.2 py37_0 conda-forge satpy 0.19.2.dev31+gf537a14d pypi_0 pypi scikit-image 0.16.2 py37hb3f55d8_0 conda-forge scipy 1.4.1 py37h921218d_0 conda-forge send2trash 1.5.0 py_0 conda-forge setuptools 45.1.0 py37_0 conda-forge shapely 1.6.4 py37hec07ddf_1006 conda-forge six 1.14.0 py37_0 conda-forge snakeviz 2.0.1 py_0 conda-forge snappy 1.1.7 he1b5a44_1003 conda-forge snowballstemmer 2.0.0 py_0 conda-forge snuggs 1.4.7 py_0 conda-forge sortedcontainers 2.1.0 py_0 conda-forge soupsieve 1.9.4 py37_0 conda-forge sphinx 2.3.1 py_0 conda-forge sphinxcontrib-applehelp 1.0.1 py_0 conda-forge sphinxcontrib-devhelp 1.0.1 py_0 conda-forge sphinxcontrib-htmlhelp 1.0.2 py_0 conda-forge sphinxcontrib-jsmath 1.0.1 py_0 conda-forge sphinxcontrib-qthelp 1.0.2 py_0 conda-forge sphinxcontrib-serializinghtml 1.1.3 py_0 conda-forge sqlalchemy 1.3.13 py37h516909a_0 conda-forge sqlite 3.30.1 hcee41ef_0 conda-forge tbb 2018.0.5 h2d50403_0 conda-forge tblib 1.6.0 py_0 conda-forge terminado 0.8.3 py37_0 conda-forge testpath 0.4.4 py_0 conda-forge thrift-cpp 0.12.0 hf3afdfd_1004 conda-forge tiledb 1.7.0 hcde45ca_2 conda-forge tk 8.6.10 hed695b0_0 conda-forge toolz 0.10.0 py_0 conda-forge tornado 6.0.3 py37h516909a_0 conda-forge traitlets 4.3.3 py37_0 conda-forge trollbufr 0.11.0 pypi_0 pypi trollimage 1.9.0 pypi_0 pypi trollsift 0.3.2 pypi_0 pypi tzcode 2019a h516909a_1002 conda-forge uriparser 0.9.3 he1b5a44_1 conda-forge urllib3 1.25.7 py37_0 conda-forge uwsift 1.0.6 pypi_0 pypi vispy 0.6.4 py37hf5ce8a7_0 conda-forge wcwidth 0.1.8 py_0 conda-forge webencodings 0.5.1 py_1 conda-forge webob 1.8.6 py_0 conda-forge wheel 0.33.6 py37_0 conda-forge widgetsnbextension 3.5.1 py37_0 conda-forge xarray 0.14.1 py_0 conda-forge xerces-c 3.2.2 h8412b87_1004 conda-forge xorg-kbproto 1.0.7 h14c3975_1002 conda-forge xorg-libice 1.0.10 h516909a_0 conda-forge xorg-libsm 1.2.3 h84519dc_1000 conda-forge xorg-libx11 1.6.9 h516909a_0 conda-forge xorg-libxau 1.0.9 h14c3975_0 conda-forge xorg-libxdmcp 1.1.3 h516909a_0 conda-forge xorg-libxext 1.3.4 h516909a_0 conda-forge xorg-libxrender 0.9.10 h516909a_1002 conda-forge xorg-renderproto 0.11.1 h14c3975_1002 conda-forge xorg-xextproto 7.3.0 h14c3975_1002 conda-forge xorg-xproto 7.0.31 h14c3975_1007 conda-forge xz 5.2.4 h14c3975_1001 conda-forge yaml 0.2.2 h516909a_1 conda-forge zarr 2.4.0 py_0 conda-forge zeromq 4.3.2 he1b5a44_2 conda-forge zict 1.0.0 py_0 conda-forge zipp 2.0.0 py_2 conda-forge zlib 1.2.11 h516909a_1006 conda-forge zstd 1.4.4 h3b9ef0a_1 conda-forge
# Your code here
@jbrockmendel
Copy link
Member

Inside pandas_dtype registry.find is giving the class and we are returning that. We need to do something like

    result = registry.find(dtype)
    if result is not None:
        if not isinstance(result, ExtensionDtype):
            # GH#31356 we have a subclass, not an instance
            result = result()
        return result

Or could do that check within or before registry.find

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Enhancement Error Reporting Incorrect or improved errors from pandas Strings String extension data type and string data
Projects
None yet
4 participants