2015-07-17 13 views
6

È possibile convertire frequenze rappresentate da stringhe come "30T" (30 minuti) "2S" (2 secondi) a qualcosa che può essere paragonato a un timedelta?Converti pandas freq string in timedelta

Sto cercando un meccanismo interno ai panda, se possibile. La codifica di tutte le possibili conversioni di stringhe usando meccanismi come these non sarebbe robusta.

+0

puoi dare il tuo contributo per favore? –

+0

possibile duplicato di [Come costruire un oggetto timedelta da una semplice stringa] (http://stackoverflow.com/questions/4628122/how-to-construct-a-timedelta-object-from-a-simple-string) – SiHa

+0

@ColonelBeauvel: l'input è stringhe come "30T" o così com'è o recuperate dall'attributo 'freqstr' di un DateTimeIndex –

risposta

9

In molti casi, è possibile utilizzare la funzione to_timedelta per questo. Sarà convertire una stringa in un 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') 

Tuttavia, sembra che pd.to_timedelta ('30T') non funziona, ma questo può forse essere considerata come una caratteristica mancante.
Ma, per questo funziona se prima convertirlo in un oggetto di frequenza e quindi fornire al 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') 

Se si inizia da un freqstr da un DatetimeIndex, il secondo approccio funziona sempre. Ma, è anche possibile utilizzare freq invece di freqstr, che restituisce un oggetto di frequenza direttamente:

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