Ошибка значения: значение истинности ряда неоднозначно при проверке значения логического столбца

#python #python-3.x #pandas

#python #python-3.x #pandas

Вопрос:

Мой фрейм данных содержит один столбец с логическими значениями, т.е. 0 или 1. Я пытаюсь проверить, соответствует ли оно 0, затем увеличьте счетчик для count_0 else increment for count_1 .

 if(df1['Project_is_approved']==0):
    count_0 = count_0   1;
if(df1['Project_is_approved']==1):
    count_1 = count_1   1;
  

Либо count_0 или count_1 должно увеличиваться.
Вместо этого я получаю ошибку при,

 if(df1['Project_is_approved']==0):
  

Ошибка:

 ValueError: The truth value of a Series is ambiguous. Use a.empty, a.bool(), a.item(), a.any() or a.all().
  

Ответ №1:

Когда вы говорите pandas проверить, равен ли ряд (столбец) чему-либо, есть ряд вещей, которые он может интерпретировать как. По замыслу pandas предпочитает не угадывать, а вместо этого выдает ошибку, которая должна привести вас к использованию более конкретных методов.

Я предполагаю, что ваша конечная цель — подсчитать, сколько 0 и сколько единиц содержится в ряду. Для этого, предполагая, что столбцы «Project_is_approved» состоят из 0 и 1, вы можете просто выполнить следующее:

 df1["Project_is_approved"][df1["Project_is_approved"] == 1].count()
  

Способ, которым это работает, слева направо:
1. Выберите столбец «Project_is_approved» из df1 .
2. Исходя из этого, примените логическую маску: сохраняйте только элементы, для которых содержимое «Project_is_approved» равно 1.
3. Подсчитайте, сколько элементов находится в этом выборе.

Вы можете сделать то же самое для подсчета 0, просто заменив 1 на 0 внутри маски.

Ответ №2:

Самый простой способ сделать это — суммировать столбец:

 count_1 = sum(df1['Project_is_approved'])
count_0 = len(df1['Project_is_approved']) - count_1
  

Это работает как для правильных логических значений True False , так и для целых значений: и 0 1