2016-05-27 3 views
0

У меня есть простой Панды Dataframe:Получение TypeError: «список» объект не вызываемая при установке индекса в панды Dataframe

data.head(5) 


> Date Time Open High Low Close Vol OI 
> 0 02/02/1993 16:00 44.23 44.38 44.13 44.34 201300 0 
> 1 02/03/1993 16:00 44.41 44.84 44.38 44.82 529400 0 
> 2 02/04/1993 16:00 44.97 45.10 44.88 45.00 531500 0 
> 3 02/05/1993 16:00 44.97 45.06 44.73 44.97 492100 0 
> 4 02/08/1993 16:00 44.97 45.13 44.92 44.98 596100 0 

Я хочу, чтобы установить столбец «Дата», как индекс:

data.set_index('Date') 

Но получить ошибку «TypeError:„список“объект не вызываемая»

TypeError         Traceback (most recent call last) 
<ipython-input-59-a610da45b82c> in <module>() 
----> 1 data.set_index('Date') 

TypeError: 'list' object is not callable 

в настоящее время индекс в данных RangeIndex:

data.index 
RangeIndex(start=0, stop=5873, step=1) 

Любой совет, почему я не могу установить индекс, используя столбец «Дата»?

спасибо.

+0

Что означает 'данных [ 'Дата'] iloc [0]' шоу.? вы также можете отправить 'data.info()' output также 'data.columns.tolist()' – EdChum

+0

Пожалуйста, включите полную трассировку в таких случаях. –

ответ

0

Я думаю, вы должны добавить параметр inplace=True к set_index:

data.set_index('Date', inplace=True) 

Другим решением является:

data = data.set_index('Date') 

Пример:

import pandas as pd 

data = pd.DataFrame({'High': {0: 44.380000000000003, 1: 44.840000000000003, 2: 45.100000000000001, 3: 45.060000000000002, 4: 45.130000000000003}, 'Vol': {0: 201300, 1: 529400, 2: 531500, 3: 492100, 4: 596100}, 'Close': {0: 44.340000000000003, 1: 44.82, 2: 45.0, 3: 44.969999999999999, 4: 44.979999999999997}, 'Date': {0: '02/02/1993', 1: '02/03/1993', 2: '02/04/1993', 3: '02/05/1993', 4: '02/08/1993'}, 'Open': {0: 44.229999999999997, 1: 44.409999999999997, 2: 44.969999999999999, 3: 44.969999999999999, 4: 44.969999999999999}, 'Time': {0: '16:00', 1: '16:00', 2: '16:00', 3: '16:00', 4: '16:00'}, 'Low': {0: 44.130000000000003, 1: 44.380000000000003, 2: 44.880000000000003, 3: 44.729999999999997, 4: 44.920000000000002}, 'OI': {0: 0, 1: 0, 2: 0, 3: 0, 4: 0}}) 
print (data) 

# Close  Date High Low OI Open Time  Vol 
#0 44.34 02/02/1993 44.38 44.13 0 44.23 16:00 201300 
#1 44.82 02/03/1993 44.84 44.38 0 44.41 16:00 529400 
#2 45.00 02/04/1993 45.10 44.88 0 44.97 16:00 531500 
#3 44.97 02/05/1993 45.06 44.73 0 44.97 16:00 492100 
#4 44.98 02/08/1993 45.13 44.92 0 44.97 16:00 596100 

print (data.columns) 
#Index(['Close', 'Date', 'High', 'Low', 'OI', 'Open', 'Time', 'Vol'], dtype='object') 


data.set_index('Date', inplace=True) 
print (data) 

#   Close High Low OI Open Time  Vol 
#Date              
#02/02/1993 44.34 44.38 44.13 0 44.23 16:00 201300 
#02/03/1993 44.82 44.84 44.38 0 44.41 16:00 529400 
#02/04/1993 45.00 45.10 44.88 0 44.97 16:00 531500 
#02/05/1993 44.97 45.06 44.73 0 44.97 16:00 492100 
#02/08/1993 44.98 45.13 44.92 0 44.97 16:00 596100 

Если необходимо установить индекс и преобразовать в дату в использовании read_csv (если разделитель , вы можете опустить его, потому что по умолчанию sep=','):

import pandas as pd 
import io 

temp=u"""Date;Time;Open;High;Low;Close;Vol;OI 
02/02/1993;16:00;44.23;44.38;44.13;44.34;201300;0 
02/03/1993;16:00;44.41;44.84;44.38;44.82;529400;0 
02/04/1993;16:00;44.97;45.10;44.88;45.00;531500;0 
02/05/1993;16:00;44.97;45.06;44.73;44.97;492100;0 
02/08/1993;16:00;44.97;45.13;44.92;44.98;596100;0""" 
#after testing replace io.StringIO(temp) to filename 
data = pd.read_csv(io.StringIO(temp), sep=";", index_col='Date', parse_dates=['Date']) 
print (data) 

      Time Open High Low Close  Vol OI 
Date              
1993-02-02 16:00 44.23 44.38 44.13 44.34 201300 0 
1993-02-03 16:00 44.41 44.84 44.38 44.82 529400 0 
1993-02-04 16:00 44.97 45.10 44.88 45.00 531500 0 
1993-02-05 16:00 44.97 45.06 44.73 44.97 492100 0 
1993-02-08 16:00 44.97 45.13 44.92 44.98 596100 0 
+0

В этом случае это не поможет. Все еще получение объекта TypeError: 'list' не может быть вызвано " – PeterL

+0

Хорошо, что такое' print (data.columns) '? – jezrael

+0

Пожалуйста, проверьте образец, если вы работаете. – jezrael