2017-02-15 204 views
0

我一直在寫一個類,使用以特定頻率採樣的熊貓數據框。它用來指定這些頻率的參數是在熊貓中常用的frequency strings(例如'H','15min','D')Python熊貓頻率字符串比較

我的一種方法需要將這些頻率相互比較 - 多少個適合其他。有沒有一種明智的,直接的方式來做到這一點?我寫了下面的,但它似乎很笨重,間接的:

def _get_relative_timediff(self, freq1, freq2): 
    """ Returns how many (based on seconds) of frequency 2 goes into frequency 1 
    """ 
    old = pd.period_range(start='1/1/1900', freq=freq1, periods=2)[1].to_timestamp() 
    new = pd.period_range(start='1/1/1900', freq=freq2, periods=2)[1].to_timestamp() 

    old = (old - pd.to_datetime('1/1/1900')).seconds 
    new = (new - pd.to_datetime('1/1/1900')).seconds 

    relative = float(old/new) 

    return relative 

它的工作原理:

my_object._get_relative_timediff('8H', 'min') 
480.0 

但我想像有一個更好的方式(或者應該是)。謝謝!

回答

1

pd.to_timedelta可用於將str轉換爲時間段。這裏有一個例子:

import pandas as pd 
import re 

def to_timedelta(freq): 
    # Add '1' to freq that doesn't have any digit 
    if not bool(re.search(r'\d', freq)): 
     freq = '1{}'.format(freq) 

    # Convert str to datetime.timedelta 
    return pd.to_timedelta(freq) 

def get_relative_timediff(freq1, freq2): 
    return to_timedelta(freq1)/to_timedelta(freq2) 

print get_relative_timediff('8H', 'min') 
print get_relative_timediff('4D', '8H') 

,你會得到:

480.0 
12.0 

通知我必須手動添加一個「1」的頻率沒有任何數字。