• [X] I have checked that this issue has not already been reported.

  • [X] I have confirmed this bug exists on the latest version of pandas.

  • [ ] (optional) I have confirmed this bug exists on the master branch of pandas.


Code Sample, a copy-pastable example

import pandas as pd

print(pd.Series(data=[None], dtype='interval[datetime64[ns]]'))

Problem description

Instantiating a Series with NA values in data fails if dtype is specified as interval[datetime64[ns]], raising an error:

> Traceback (most recent call last): > File "main.py", line 3, in > print(pd.Series( > File "/opt/virtualenvs/python3/lib/python3.8/site-packages/pandas/core/series.py", line 364, in __init__ > data = sanitize_array(data, index, dtype, copy, raise_cast_failure=True) > File "/opt/virtualenvs/python3/lib/python3.8/site-packages/pandas/core/construction.py", line 480, in sanitize_array > subarr = _try_cast(data, dtype, copy, raise_cast_failure) > File "/opt/virtualenvs/python3/lib/python3.8/site-packages/pandas/core/construction.py", line 579, in _try_cast > subarr = array_type(arr, dtype=dtype, copy=copy) > File "/opt/virtualenvs/python3/lib/python3.8/site-packages/pandas/core/arrays/interval.py", line 280, in _from_sequence > return cls(scalars, dtype=dtype, copy=copy) > File "/opt/virtualenvs/python3/lib/python3.8/site-packages/pandas/core/arrays/interval.py", line 201, in __new__ > return cls._simple_new( > File "/opt/virtualenvs/python3/lib/python3.8/site-packages/pandas/core/arrays/interval.py", line 227, in _simple_new > left = left.astype(dtype.subtype) > File "/opt/virtualenvs/python3/lib/python3.8/site-packages/pandas/core/indexes/numeric.py", line 355, in astype > raise TypeError( > TypeError: Cannot convert Float64Index to dtype datetime64[ns]; integer values are required for conversion

Expected Output

0    NaN
dtype: interval

Output of pd.show_versions()

> INSTALLED VERSIONS > ------------------ > commit : 2cb96529396d93b46abab7bbc73a208e708c642e > python : 3.8.10.final.0 > python-bits : 64 > OS : Linux > OS-release : 5.4.0-1043-gcp > Version : #46-Ubuntu SMP Mon Apr 19 19:17:04 UTC 2021 > machine : x86_64 > processor : x86_64 > byteorder : little > LC_ALL : en_US.UTF-8 > LANG : en_US.UTF-8 > LOCALE : en_US.UTF-8 > > pandas : 1.2.4 > numpy : 1.20.3 > pytz : 2021.1 > dateutil : 2.8.1 > pip : 19.3.1 > setuptools : 56.0.0 > Cython : None > pytest : None > hypothesis : None > sphinx : None > blosc : None > feather : None > xlsxwriter : None > lxml.etree : None > html5lib : 1.1 > pymysql : None > psycopg2 : None > jinja2 : 3.0.1 > IPython : None > pandas_datareader: None > bs4 : None > bottleneck : None > fsspec : None > fastparquet : None > gcsfs : None > matplotlib : 3.4.2 > numexpr : None > odfpy : None > openpyxl : None > pandas_gbq : None > pyarrow : None > pyxlsb : None > s3fs : None > scipy : 1.4.1 > sqlalchemy : 1.4.15 > tables : None > tabulate : None > xarray : None > xlrd : None > xlwt : None > numba : None

Comment From: mzeitlin11

Thanks for reporting this @tlaytongoogle! Could you please add an informative title to the issue?

Comment From: tlaytongoogle

Title added.

Comment From: weikhor

Hi, I try to work on this problem. I am not sure whether this is considered bug. I notice that in this file pandas\tests\indexes\interval\test_astype.py, the function

index = IntervalIndex.from_arrays(
                  [-1.5, np.nan, 0.0, 0.0, 1.5], [-0.5, np.nan, 1.0, 1.0, 3.0], closed="both"
             )
@pytest.mark.parametrize("subtype", ["datetime64[ns]", "timedelta64[ns]"])
    def test_subtype_datetimelike(self, index, subtype):
        dtype = IntervalDtype(subtype, "right")
        msg = "Cannot convert .* to .*; subtypes are incompatible"
        with pytest.raises(TypeError, match=msg):
            index.astype(dtype)

The series [-1.5, np.nan, 0.0, 0.0, 1.5] in IntervalIndex index contains nan values. Based on test case, the expected result is TypeError: Cannot convert Float64Index to dtype datetime64[ns]; integer values are required for conversion which is same result from issue reported here.

Thank

Comment From: tlaytongoogle

@weikhor Consider that, in contrast to that test, it is entirely possible to convert the values from a Float64Index (including NaN values) into datetime64[ns] values via something like:

DatetimeIndex(index.left, dtype="datetime64[ns]")  # index.left is a Float64Index

The key point here is that passing values into a constructor is not quite equivalent to casting with astype. Thus, I don't think that this test is in-and-of-itself evidence that the reported issue constitutes intended behavior.