2015-07-17 13 views
6

Czy można konwertować częstotliwości reprezentowane przez ciąg znaków takie jak "30T" (30 minut) "2S" (2 sekundy) na coś, co można porównać do timedelty?Konwertuj pandas freq string na timedelta

Poszukuję wewnętrznego mechanizmu do pand, jeśli to możliwe. Kodowanie wszystkich możliwych konwersji ciągów przy użyciu mechanizmu takiego jak these nie byłoby niezawodne.

+0

można dać swój wkład proszę? –

+0

możliwy duplikat [Jak skonstruować obiekt timedelta z prostego łańcucha] (http://stackoverflow.com/questions/4628122/how-to-conctct-a-timedelta-object-from-a-simple-string) – SiHa

+0

@ColonelBeauvel: dane wejściowe są łańcuchami takimi jak "30T", jak jest lub odzyskane z atrybutu 'freqstr' obiektu DateTimeIndex –

Odpowiedz

9

W wielu przypadkach można użyć do tego funkcji to_timedelta. Będzie przekonwertować ciąg do 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') 

Jednak wydaje się, że pd.to_timedelta („30T”) nie działa, ale może to może być traktowane jako brakującego elementu.
Ale w tym jednym to działa, jeśli najpierw przekonwertować go do obiektu częstotliwości, a następnie dostarczyć go do 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') 

Jeśli zaczniesz od freqstr ze DatetimeIndex, drugie podejście zawsze będzie działać. Ale można też użyć freq zamiast freqstr, która zwraca obiekt częstotliwości bezpośrednio:

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')