将pandas freq string转换为timedelta

时间:2015-07-17 06:43:39

标签: python pandas

是否可以将字符串表示的频率(如“30T”(30分钟)“2S”(2秒))转换为可以与timedelta进行比较的内容?

如果可能的话,我正在寻找熊猫内部的机制。使用诸如these之类的机制对所有可能的字符串转换进行编码将不会很健壮。

1 个答案:

答案 0 :(得分:19)

在许多情况下,您可以使用to_timedelta功能。它会将字符串转换为timedelta:

In [9]: pd.to_timedelta('30min')
Out[9]: Timedelta('0 days 00:30:00')

In [10]: pd.to_timedelta('2S')
Out[10]: Timedelta('0 days 00:00:02')

但是,似乎pd.to_timedelta(' 30T')不起作用,但这可能被视为缺失功能。
但是,对于这个,如果你首先将它转换为频率对象,然后将其提供给to_timedelta,它确实有效:

In [19]: from pandas.tseries.frequencies import to_offset

In [20]: pd.to_timedelta(to_offset('30T'))
Out[20]: Timedelta('0 days 00:30:00')

如果从DatetimeIndex的freqstr开始,第二种方法将始终有效。但是,您也可以使用freq代替freqstr,它会直接返回频率对象:

In [34]: dtidx = pd.date_range('2012-01-01', periods=5, freq='30min')

In [35]: pd.to_timedelta(dtidx.freq)
Out[35]: Timedelta('0 days 00:30:00')