2017-08-27 173 views
2

原生熊猫Timedelta()(版本0.20.3)不能转换为特定频率astype(),尽管文档说它应该是可能的。我想弄清楚我错过了什么。Timedelta对象不能用astype转换()

Timedelta docs

Timedelta系列,TimedeltaIndex和Timedelta标量可以通过用另一timedelta,划分或通过astyping到特定timedelta类型被转换为其他“频率”。

这是真的,我可以通过分工与另一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(这似乎有点有趣,因为有一个本地熊猫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 

从我的例子类型的day,然而,不同的是:

type(day) 
# <class 'pandas._libs.tslib.Timedelta'> 

我还没挖成tslib源弄清楚发生了什么引擎盖下回事 - 希望有人能清除文档中正在发生的事情与我在此尝试做的事情之间似乎存在的差异。谢谢!

回答

3

pd.Timedelta没有方法astypepd.TimedeltaIndex没有。

pd.to_timedelta([day]).astype('timedelta64[h]')[0] 

24 
+0

好的,谢谢你的澄清。 –