【发布时间】:2017-08-27 04:14:04
【问题描述】:
原生 Pandas Timedelta()(版本为 0.20.3)无法使用 astype() 转换为特定频率,尽管文档说应该可以。我试图弄清楚我错过了什么。
Timedelta Series、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(这似乎有点有趣,因为有一个原生 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
但是,我的示例中 day 的类型不同:
type(day)
# <class 'pandas._libs.tslib.Timedelta'>
我还没有深入了解tslib 的来源以弄清楚幕后发生的事情 - 希望有人能澄清文档中发生的事情与我在这里尝试做的事情之间的看似差异。谢谢!
【问题讨论】: