2016-12-13 3 views
1

У меня есть процесс фильтрации два шага по моим данным:Панды выбор dataframe

data = data[data['Volume']>1] 
data = data[data['Open']>0] 

Я пытался сделать это:

data = data[data['Open']>0 and data['Volume']>1] 

Но я получаю ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().

Есть элегантный способ выполнить эту операцию за один раз?

ответ

1

Использование & и обертывают условия с использованием ():

data = data[(data['Open']>0) & (data['Volume']>1)] 

Вы должны использовать &, | и ~ для and, or и not соответственно. Скобки необходимы из-за приоритета оператора.

Проблема с and, or и not является то, что возвращаемый результат представляет собой массив булевых, который он не понимает, как интерпретировать, как это ожидает скалярное значение.

Вот почему вы получите возвращается ошибка, если вы добавили any() или all() это будет возвращать одно логическое значение, которое было бы принять

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