2016-06-03 3 views
1

Я использую Python 3.5.1 и панды 0.18.0 и пытаюсь использовать этот notebook для изменения данных финансовых клеща в качестве упражнения представляет интерес для меня:Проблем с пандой TimeSeries RESAMPLE

У меня возникли проблемы с некоторыми командами, и задавался вопросом, связано ли это с версиями python и pandas?

Например:

Это файл, я читаю в с попутным выхода:

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 

Когда я пытаюсь затем создать другой объект, как это:

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

Я получаю NaN:

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

Но если я использую ссылку на столбец вместо имен он работает:

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 

Почему это?

Кроме того, ноутбук показывает другой объект, созданный:

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

Когда я пытаюсь это, я получаю эту ошибку:

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

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

Это работает, если я не называю высокий столбец :

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 

Какая инструкция подходит вам по этому запросу?

Я ценю, что ноутбук, вероятно, недействителен для версии Python/Pandas Im, но, как новичок, он очень полезен для меня, поэтому хотел бы, чтобы он работал на моем data.

ответ

2

В именах столбцов есть проблема spaces.

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

Вы можете strip это пространства:

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 

Теперь вы можете использовать:

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

Если вы не хотите удалить пробелы, добавить пространство для имени столбца:

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

Но bette г использовать Resampler.ohlc, если pandas версия выше, 0.18.0:

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

Благодаря Jezrael! – ade1e