2016-03-23 3 views
0

Я пытаюсь определить все варианты контрактов для MSFT и GOOG, которые имеют более 10 000 единиц в день и распечатывают имя символа. Я получаю сообщение об ошибке «Значение истинности серии является неоднозначным. Используйте a.empty, a.bool(), a.item(), a.any() или a.all(). " Ошибка указана в строке 13. Любая помощь приветствуется.Ошибка: значение истинности серии неоднозначно. Python & Pandas

from pandas_datareader.data import Options 
import pandas as pd 
from pandas import DataFrame 
import datetime 

tickers = ['GOOG','MSFT'] 


for i in tickers: 
    option = Options(i,'yahoo') 
    data = option.get_all_data() 

    if data.Vol > 10000: 
     print data.Symbol 

    else: 
     pass 
+2

Вы пытаетесь написать код питона не панды коды. Начните здесь: http://pandas.pydata.org/pandas-docs/stable/basics.html На самом деле ваша точная ошибка здесь, под «предупреждением»: http://pandas.pydata.org/pandas-docs/stable /basics.html#boolean-reductions – JohnE

+0

'data.Vol> 10000' возвращает булевскую серию - посмотрите на нее в интерпретаторе! Вы можете попробовать 'data.Volume.max()> 10000', но, как сказал JohnE, есть лучшие способы сделать это. –

ответ

1

Проблема состоит в том, что условие (data.Vol > 10000) возвращает массив логических значений. NumPy выдает эту ошибку, потому что он не может знать, вы имеете в виду того, чтобы спросить «есть какие-либо из этих значений > x?», «Все эти значения > x?» И т.д.

В этом случае вы должны использовать логическую индексацию для получите интересующие вас строки: data[data.Vol > 10000].

Оттуда вы можете получить все необходимые символы: data[data.Vol > 10000].index.get_level_values('Symbol')

Смежные вопросы