将pandas freq string转换为timedelta

Alf*_* M. 10 python pandas

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

如果可能的话,我正在寻找熊猫内部的机制.使用编码机制的所有可能的字符串转换等,这些不会是强劲的.

jor*_*ris 20

在许多情况下,您可以使用此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')
Run Code Online (Sandbox Code Playgroud)

但是,似乎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')
Run Code Online (Sandbox Code Playgroud)

如果freqstr从DatetimeIndex开始,第二种方法将始终有效.但是,您也可以使用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')
Run Code Online (Sandbox Code Playgroud)

  • 谢谢,这个答案对我很有帮助。请注意,许多个月后,在 pandas 2 中,`pd.to_timedelta('30T')` 确实有效。从什么时候开始我也不确定了。 (2认同)