为什么 pd.Interval 的列表不能被 DataFrame 自动识别?
Why list of pd.Interval doesn't recognized by DataFrame automatically?
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 不 'know' 如果我们想将此列视为对象(用于转储到磁盘,..),或字符串(用于连接,..)或什至作为类别类型的元素?如果是这样 - intervals
可能有哪些不同的用例?如果不是,这里是什么情况?
这是 pandas 中的错误: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
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 不 'know' 如果我们想将此列视为对象(用于转储到磁盘,..),或字符串(用于连接,..)或什至作为类别类型的元素?如果是这样 - intervals
可能有哪些不同的用例?如果不是,这里是什么情况?
这是 pandas 中的错误: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