Как фильтровать данные из фрейма данных с помощью оператора сравнения между логическим и строковым типами данных

#python #pandas #dataframe #data-science

#питон #панды #фрейм данных #наука о данных

Вопрос:

Я работаю над набором данных со следующими типами данных:

 gender,year,Horror,Fiction,Comedy,words m, 1980, F, F, T, abc def m, 1980, F, T, F, gh hjjtt kl[pom f, 1990, F, F, T, ghj khgr kll f, 1970, T, F, F, or jtu jajd f, 2000, F, F, T, rreun jfmn f, 2010, T, F, F, jhhkjn jlkjan  

Итак, здесь у меня есть логические значения для столбцов Horror , Fiction , и Comedy .

Я хочу подсчитать количество мужчин, где колонка Horror == True

Я перепробовал весь приведенный ниже код, но все это выдает ошибку:

 Male_data = data[data.gender == 'm' amp; data.Horror == True]  
 Male_data = data[data['gender'] == 'm' amp; data['Horror'] == True]  
 Male_data = data[data['gender'] == 'm'] amp; data[data['Horror'] == True]  

Ошибка в том, что:

Ошибка типа: Не удается выполнить «rand_» с массивом dtyped [bool] и скаляром типа [bool]

Комментарии:

1. добавьте несколько скобок вокруг ваших первых 2 попыток. amp; обычно имеет довольно высокий порядок следования

Ответ №1:

Попробуйте это:

 Male_data = data[(data.gender == 'm') amp; (data.Horror == True)]  

Или:

 Male_data = data[data.gender.eq('m') amp; data.Horror.eq(True)]  

amp; имеет более высокий приоритет , чем == , поэтому вам нужно заключить == условия в круглые скобки, чтобы переопределить правила приоритета и сначала выполнить == оценку операций.