python类型转换astype时间_python – 使用astype()无法转换Timedelta对象

原生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源代码来弄清楚幕后发生了什么 – 希望有人能够清除文档中发生的事情与我在这里尝试做的事情之间的差异.谢谢!

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值