2016-02-28 6 views
1

Я использую Pandas для вычисления стандартного отклонения столбца в кадре данных, затем умножьте его на 100, чтобы получить процент, а затем, наконец, распечатайте его как следующим образом:Невозможно размножить «метод экземпляра» pandas - как изменить на float

import pandas as pd 

results = pd.read_csv("MRAret.csv") 
vol = results["Return"].std 
print "Volatility: ",round(vol*100,2),"%" 

Однако я получаю следующее сообщение об ошибке:

File "C:/Users/Stuart/Documents/SPYDER/MRA Analysis.py", line 37, in <module> 
print "Volatility: ",round(vol*100,2),"%" 

TypeError: unsupported operand type(s) for *: 'instancemethod' and 'int' 

Так, очевидно, «т» тип переменной является «instancemethod», который я никогда не встречал раньше (я новичок Панды).

Я попытался изменить тип плавать с помощью:

vol = float(vol) 

, но я получаю следующее сообщение об ошибке:

TypeError: float() argument must be a string or a number 

Когда я просто наберите в «Vol» в моей консоли IPython я получаю выход:

In [95]: vol 
-> vol() 
Out[95]: 0.005856992616571794 

Но когда я типа:

print vol 

я получаю:

In [96]: print vol 
<bound method Series.std of 0  0.000000 
1  0.004864 
2  0.001604 
... 
2369 0.004290 
2370 0.014001 
Name: Return, dtype: float64 

Я не понимаю, как это может быть одно единственное значение и массив значений в то же время.

Не мог бы кто-нибудь объяснить мне, как я могу манипулировать переменной vol типа "instancemethod", чтобы выполнить арифметические вычисления.

Большое спасибо.

+0

не должен это будет 'vol = results [" Return "]. std()'? – EdChum

+0

Это действительно разобрало проблему сразу! Огромное спасибо. Я забыл(), поскольку я не использовал никаких аргументов. Я должен помнить, что в будущем буду меньше небрежным! – s666

ответ

2

Ваша ошибка пришла от этого опечатка:

vol = results["Return"].std 

по существу vol ссылается метод std вы хотели сделать это:

vol = results["Return"].std() 

, который является выходом этого метода

+1

Спасибо вам большое! – s666