Convertir des pandas FREQ string en timedelta

est-il possible de convertir les fréquences représentées par une chaîne telle que "30T" (30 minutes) "2S" (2 secondes) en quelque chose qui peut être comparé à un timedelta?

je cherche un mécanisme interne aux pandas si possible. Codage de toute la conversion de chaîne possible en utilisant un mécanisme tel que ceux-ci ne serait pas robuste.

8
demandé sur Community 2015-07-17 09:43:39

1 réponses

Dans de nombreux cas, vous pouvez utiliser le to_timedelta fonction pour cela. Il convertira une chaîne de caractères en 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')

cependant, il semble que pd.to_timedelta ('30T') ne fonctionne pas, mais cela peut être considéré comme une caractéristique manquante.

Mais, pour celui-ci, cela fonctionne si vous le convertissez d'abord en un objet de fréquence et le fournissez ensuite à 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')

si vous commencez par un freqstr à partir d'un indice Datetimeindexe, la seconde approche fonctionnera toujours. Mais, vous pouvez également utiliser freq au lieu de freqstr, qui renvoie directement un objet fréquence:

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')
15
répondu joris 2015-07-17 08:46:47