为什么DataFrame无法自动识别pd.Interval列表?

时间:2019-05-30 14:23:34

标签: pandas dataframe intervals

intervals = [pd.Interval(0, 0.1), pd.Interval(1, 5)]
pd.DataFrame({'d':intervals}).dtypes

将dtype生成为 Object ,而不是 Interval

>>> d    object
>>> dtype: object

但同时可以即时识别DateTimes列表:

datetimes = [pd.Timestamp('2013-01-02'), pd.Timestamp('2016-10-20')]
pd.DataFrame({'d':datetimes}).dtypes
>>> d    datetime64[ns]
>>> dtype: object

intervals的情况有点类似于strings的列表-DataFrame中的列的默认类型也将是object,因为DataFrame不会'知道'我们是否想要将此列视为对象(用于转储到磁盘,..),还是字符串(用于串联,..),甚至视为类别类型的元素?如果是这样-intervals可能有哪些不同的用例?如果不是这样的话?

1 个答案:

答案 0 :(得分:1)

这是熊猫中的错误:https://github.com/pandas-dev/pandas/issues/23563

目前,最干净的解决方法是用pd.array包装列表:

In [1]: import pandas as pd; pd.__version__
Out[1]: '0.24.2'

In [2]: intervals = [pd.Interval(0, 0.1), pd.Interval(1, 5)]

In [3]: pd.DataFrame({'d': pd.array(intervals)}).dtypes
Out[3]:
d    interval[float64]
dtype: object