是否可以将字符串表示的频率(如“30T”(30分钟)“2S”(2秒))转换为可以与timedelta进行比较的内容?
如果可能的话,我正在寻找熊猫内部的机制。使用诸如these之类的机制对所有可能的字符串转换进行编码将不会很健壮。
答案 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')