Skip to content

BUG: Constructing a Series from a scalar generally doesn't work for extension types #28401

@jschendel

Description

@jschendel

Code Sample, a copy-pastable example if possible

Construction without specifying a dtype results in object dtype for Interval and Period:

In [2]: pd.Series(pd.Interval(0, 1), index=range(3))
Out[2]: 
0    (0, 1]
1    (0, 1]
2    (0, 1]
dtype: object

In [3]: pd.Series(pd.Period("2019Q1", freq="Q"), index=range(3))
Out[3]: 
0    2019Q1
1    2019Q1
2    2019Q1
dtype: object

This looks okay for a tz-aware Timestamp:

In [4]: pd.Series(pd.Timestamp("2019", tz="US/Eastern"), index=range(3))
Out[4]: 
0   2019-01-01 00:00:00-05:00
1   2019-01-01 00:00:00-05:00
2   2019-01-01 00:00:00-05:00
dtype: datetime64[ns, US/Eastern]

Specifying a dtype raises for Interval, Period and tz-aware Timestamp:

In [5]: pd.Series(pd.Interval(0, 1), index=range(3), dtype=pd.IntervalDtype("int64"))
---------------------------------------------------------------------------
TypeError: IntervalArray(...) must be called with a collection of some kind, (0, 1] was passed

In [6]: pd.Series(pd.Period("2019Q1", freq="Q"), index=range(3), dtype=pd.PeriodDtype("Q"))
---------------------------------------------------------------------------
ValueError: Buffer has wrong number of dimensions (expected 1, got 0)

In [7]: pd.Series(pd.Timestamp("2019", tz="US/Eastern"), index=range(3), dtype=pd.DatetimeTZDtype(tz="US/Eastern"))
---------------------------------------------------------------------------
TypeError: 'Timestamp' object is not iterable

Both of the above patterns appear to be working fine when using scalars that correspond to non-extensions dtypes (e.g. numeric, tz-naive, timedelta).

Problem description

The Series constructor is not correctly inferring the dtype from scalar Interval/Period objects when a dtype isn't specified, and raises for Interval/Period/tz-aware Timestamp when a dtype is specified.

Expected Output

I'd expect the Series to be constructed with the proper dtype.

Output of pd.show_versions()

INSTALLED VERSIONS

commit : 261c3a6
python : 3.7.3.final.0
python-bits : 64
OS : Linux
OS-release : 4.19.14-041914-generic
machine : x86_64
processor : x86_64
byteorder : little
LC_ALL : None
LANG : en_US.UTF-8
LOCALE : en_US.UTF-8

pandas : 0.25.0+332.g261c3a667
numpy : 1.16.4
pytz : 2019.1
dateutil : 2.8.0
pip : 19.1.1
setuptools : 41.0.1
Cython : 0.29.10
pytest : 4.6.2
hypothesis : 4.23.6
sphinx : 1.8.5
blosc : None
feather : None
xlsxwriter : 1.1.8
lxml.etree : 4.3.3
html5lib : 1.0.1
pymysql : None
psycopg2 : None
jinja2 : 2.10.1
IPython : 7.5.0
pandas_datareader: None
bs4 : 4.7.1
bottleneck : 1.2.1
fastparquet : 0.3.0
gcsfs : None
lxml.etree : 4.3.3
matplotlib : 3.1.0
numexpr : 2.6.9
odfpy : None
openpyxl : 2.6.2
pandas_gbq : None
pyarrow : 0.11.1
pytables : None
s3fs : 0.2.1
scipy : 1.2.1
sqlalchemy : 1.3.4
tables : 3.5.2
xarray : 0.12.1
xlrd : 1.2.0
xlwt : 1.3.0
xlsxwriter : 1.1.8

Metadata

Metadata

Assignees

No one assigned

    Labels

    BugConstructorsSeries/DataFrame/Index/pd.array ConstructorsDtype ConversionsUnexpected or buggy dtype conversionsExtensionArrayExtending pandas with custom dtypes or arrays.

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions