2015-06-16 9 views
11

Quando si utilizza la funzione panda resample su un DataFrame per convertire i dati di graduazione in OHLCV, si verifica un errore di ricampionamento.Errore di ricampionamento panda: valido solo con DatetimeIndex o PeriodIndex

Come dovremmo risolvere l'errore?

data = pd.read_csv('tickdata.csv', header=None, names=['Timestamp','Price','Volume']).set_index('Timestamp') 
data.head() 

enter image description here

# Resample data into 30min bins 
ticks = data.ix[:, ['Price', 'Volume']] 
bars = ticks.Price.resample('30min', how='ohlc') 
volumes = ticks.Volume.resample('30min', how='sum') 

Questo dà l'errore:

TypeError: Only valid with DatetimeIndex or PeriodIndex 

risposta

22

Convertire il timestamp interi nell'indice per un DatetimeIndex:

data.index = pd.to_datetime(data.index, unit='s') 

Questa interpreta il numero intero s come secondi dall'Epoca.


Ad esempio, dato

data = pd.DataFrame(
    {'Timestamp':[1313331280, 1313334917, 1313334917, 1313340309, 1313340309], 
    'Price': [10.4]*3 + [10.5]*2, 'Volume': [0.779, 0.101, 0.316, 0.150, 1.8]}) 
data = data.set_index(['Timestamp']) 
#    Price Volume 
# Timestamp     
# 1313331280 10.4 0.779 
# 1313334917 10.4 0.101 
# 1313334917 10.4 0.316 
# 1313340309 10.5 0.150 
# 1313340309 10.5 1.800 

data.index = pd.to_datetime(data.index, unit='s') 

cede

     Price Volume 
2011-08-14 14:14:40 10.4 0.779 
2011-08-14 15:15:17 10.4 0.101 
2011-08-14 15:15:17 10.4 0.316 
2011-08-14 16:45:09 10.5 0.150 
2011-08-14 16:45:09 10.5 1.800 

Poi

ticks = data.ix[:, ['Price', 'Volume']] 
bars = ticks.Price.resample('30min', how='ohlc') 
volumes = ticks.Volume.resample('30min', how='sum') 

può calcolare:

In [368]: bars 
Out[368]: 
        open high low close 
2011-08-14 14:00:00 10.4 10.4 10.4 10.4 
2011-08-14 14:30:00 NaN NaN NaN NaN 
2011-08-14 15:00:00 10.4 10.4 10.4 10.4 
2011-08-14 15:30:00 NaN NaN NaN NaN 
2011-08-14 16:00:00 NaN NaN NaN NaN 
2011-08-14 16:30:00 10.5 10.5 10.5 10.5 

In [369]: volumes 
Out[369]: 
2011-08-14 14:00:00 0.779 
2011-08-14 14:30:00  NaN 
2011-08-14 15:00:00 0.417 
2011-08-14 15:30:00  NaN 
2011-08-14 16:00:00  NaN 
2011-08-14 16:30:00 1.950 
Freq: 30T, Name: Volume, dtype: float64 
Problemi correlati