Numeric Index constructors should validate dtype parameter (original) (raw)

The Int64Index, UInt64Index, and Float64Index constructors do not validate the dtype parameter and instead ignore it when it conflicts with the default dtype:

In [1]: import pandas as pd; pd.version Out[1]: '0.26.0.dev0+842.g78c3c1640'

In [2]: pd.Int64Index([1, 2, 3], dtype="float64") Out[2]: Int64Index([1, 2, 3], dtype='int64')

In [3]: pd.UInt64Index([1, 2, 3], dtype="categorical") Out[3]: UInt64Index([1, 2, 3], dtype='uint64')

In [4]: pd.Float64Index([1, 2, 3], dtype="datetime64") Out[4]: Float64Index([1.0, 2.0, 3.0], dtype='float64')

Other index types do not allow non-standard dtypes:

In [5]: pd.CategoricalIndex(list('abc'), dtype='timedelta64')

ValueError: Unknown dtype 'timedelta64'

In [6]: pd.DatetimeIndex(['2018-01-01'], dtype='int64')

ValueError: Unexpected value for 'dtype': 'int64'. Must be 'datetime64[ns]' or DatetimeTZDtype'.

In [7]: pd.IntervalIndex([pd.Interval(0, 1)], dtype=object)

TypeError: dtype must be an IntervalDtype, got object

In [8]: pd.RangeIndex(0, 3, dtype='float64')

TypeError: Invalid to pass a non-int64 dtype to RangeIndex

Expected Output

I'd expect In [2]/In [3]/In [4] to raise a ValueError.