原生Pandas Timedelta()(版本0.20.3)无法使用astype()转换为特定频率,尽管文档说它应该是可能的.我想弄清楚我错过了什么.
Timedelta Series, TimedeltaIndex, and Timedelta scalars can be converted to other ‘frequencies’ by dividing by another timedelta, or by astyping to a specific timedelta type.
确实,我可以通过分裂与另一个timedelta进行转换:
import pandas as pd
pd.__version__
# 0.20.3
day = pd.Timedelta("1 day")
day / pd.Timedelta(1, "h")
# 24.0
但是astype()失败了:
day.astype('timedelta64[h]')
# AttributeError: 'Timedelta' object has no attribute 'astype'
文档中的示例实际上并不使用pd.Timedelta(),这似乎是问题的一部分.相反,它使用Series(date_range)减法和datetime.timedelta(考虑到有一个原生的Pandas Timedelta(),它看起来有点滑稽).
# This example is used in the Timedelta docs.
import datetime
td = pd.Series(pd.date_range('20130101', periods=4)) - pd.Series(pd.date_range('20121201', periods=4))
td[2] += datetime.timedelta(minutes=5, seconds=3)
td[3] = np.nan
td
0 31 days 00:00:00
1 31 days 00:00:00
2 31 days 00:05:03
3 NaT
dtype: timedelta64[ns]
# ...
td.astype('timedelta64[s]')
Out[75]:
0 2678400.0
1 2678400.0
2 2678703.0
3 NaN
dtype: float64
然而,我的例子中的日期类型是不同的:
type(day)
#
我还没有挖掘tslib源代码来弄清楚幕后发生了什么 – 希望有人能够清除文档中发生的事情与我在这里尝试做的事情之间的差异.谢谢!