2016-06-03 25 views
1

Ich verwende Python 3.5.1 und Pandas 0.18.0 und versuchen, diese notebook zu verwenden Finanztickdaten zu modifizieren, wie die Übungen für mich von Interesse sind:Probleme mit Pandas Zeitreihe Resampling

ich Probleme mit bin mit einigen der Befehle und fragte mich, ob dies aufgrund der Versionen von Python und Pandas ist?

Zum Beispiel:

Dies ist die Datei, die ich mit zugehörigem Ausgang lese in:

data = pd.read_csv('test30dayes2tickforpython.csv',index_col=0,  header=0,parse_dates={"Timestamp" : [0,1]}) 
data.dtypes 
Out[80]: 
Open    float64 
High    float64 
Low    float64 
Last    float64 
Volume    int64 
NumberOfTrades  int64 
BidVolume   int64 
AskVolume   int64 
dtype: object 

Wenn ich versuche, um dann ein anderes Objekt wie folgt zu erstellen:

ticks = data.ix[:, ['High','Volume']] 
ticks 

ich NaN-Werte:

High Volume 
Timestamp  
2015-12-27 23:00:25.000 NaN NaN 
2015-12-27 23:01:11.000 NaN NaN 

Aber wenn ich die Spaltenreferenz statt Namen verwenden funktioniert es:

ticks = data.ix[:, [1,4]] 
ticks 


High Volume 
Timestamp  
2015-12-27 23:00:25.000 2045.25 1 
2015-12-27 23:01:11.000 2045.50 2 

Warum ist das?

Auch zeigt das Notebook ein anderes Objekt erstellt:

bars = ticks.Price.resample('1min', how='ohlc') 
bars 

Wenn ich das versuchen bekomme ich diesen Fehler:

bars = ticks.High.resample('60min', how='ohlc') 
bars 

1 bars = ticks.High.resample('60min', how='ohlc')
AttributeError: 'DataFrame' object has no attribute 'High'

Es funktioniert, wenn ich die hohe Säule nicht nennen :

bars = ticks.resample('60min', how='ohlc') 
bars 

FutureWarning: how in .resample() is deprecated the new syntax is .resample(...).ohlc()

High Volume 
open high low close open high low close 
Timestamp        
2015-12-27 23:00:00 2045.25 2047.75 2045.25 2045.25 1.0 7.0 1.0 5.0 

Was ist der richtige Befehl dafür?

Ich schätze, dass das Notebook ist wahrscheinlich nicht gültig für die Version von Python/Pandas Im, aber als Neuling ist es sehr nützlich für mich, so würde es auf meiner data funktioniert.

Antwort

2

Es gibt ein Problem spaces in Spaltennamen.

print (data.columns) 
Index(['Timestamp', ' Open', ' High', ' Low', ' Last', ' Volume', 
     ' NumberOfTrades', ' BidVolume', ' AskVolume'], 
     dtype='object') 

Sie können strip diese Räume:

data.columns = data.columns.str.strip() 
print (data.columns) 
Index(['Timestamp', 'Open', 'High', 'Low', 'Last', 'Volume', 'NumberOfTrades', 
     'BidVolume', 'AskVolume'], 
     dtype='object') 

ticks = data.ix[:, ['High','Volume']] 
print (ticks.head()) 
     High Volume 
0 2045.25  1 
1 2045.50  2 
2 2045.50  2 
3 2045.50  2 
4 2045.50  2 

Jetzt können Sie verwenden:

print (ticks.Price.resample('1min', how='ohlc')) 

Wenn Sie Leerzeichen Dont entfernen möchten, fügen Sie Raum Spaltenname:

print (ticks[' Price'].resample('1min', how='ohlc')) 

Aber bette r ist Resampler.ohlc verwenden, wenn pandas Version höher als 0.18.0:

print (ticks.Price.resample('1min').ohlc()) 
+0

Dank Jezrael! – ade1e