0 added
0 removed
Original
2026-01-01
Modified
2026-02-26
1
<p>При работе с данными часто возникает необходимость найти элементы по определенному условию. С точки зрения поиска ошибок в данных критерии поиска могут быть разными, например:</p>
1
<p>При работе с данными часто возникает необходимость найти элементы по определенному условию. С точки зрения поиска ошибок в данных критерии поиска могут быть разными, например:</p>
2
<ul><li>Отрицательные значения в графе "Количество продаж"</li>
2
<ul><li>Отрицательные значения в графе "Количество продаж"</li>
3
<li>Буквы вместо цифр в графе "Номер телефона"</li>
3
<li>Буквы вместо цифр в графе "Номер телефона"</li>
4
<li>Нереалистично большие числа в графе "Сумма сделки"</li>
4
<li>Нереалистично большие числа в графе "Сумма сделки"</li>
5
</ul><p>В стандартном Python искать и фильтровать значения можно с помощью функции filter(). В Numpy есть схожая функциональность, которую мы рассмотрим в этом уроке. Вы узнаете, как получить элементы по заданному условию при работе с массивами numpy.ndarray.</p>
5
</ul><p>В стандартном Python искать и фильтровать значения можно с помощью функции filter(). В Numpy есть схожая функциональность, которую мы рассмотрим в этом уроке. Вы узнаете, как получить элементы по заданному условию при работе с массивами numpy.ndarray.</p>
6
<h2>Как создать булеву маску</h2>
6
<h2>Как создать булеву маску</h2>
7
<p>Для фильтрации значений массива numpy.ndarray по определенному условию используют<strong>булевы маски</strong>- массивы значений True и False. Каждый элемент проходит фильтрацию через булеву маску и распределяется в зависимости от значения маски:</p>
7
<p>Для фильтрации значений массива numpy.ndarray по определенному условию используют<strong>булевы маски</strong>- массивы значений True и False. Каждый элемент проходит фильтрацию через булеву маску и распределяется в зависимости от значения маски:</p>
8
<ul><li>Если на той же позиции в маске стоит значение True, элемент добавляется в итоговый массив</li>
8
<ul><li>Если на той же позиции в маске стоит значение True, элемент добавляется в итоговый массив</li>
9
<li>Если на позиции стоит значение False, то элемент не будет включен в итоговый массив</li>
9
<li>Если на позиции стоит значение False, то элемент не будет включен в итоговый массив</li>
10
</ul><p>Существует три способа работы с булевой маской:</p>
10
</ul><p>Существует три способа работы с булевой маской:</p>
11
<ul><li>Создать массив значений True и False вручную</li>
11
<ul><li>Создать массив значений True и False вручную</li>
12
<li>Использовать операторы сравнения над элементами исходного массива</li>
12
<li>Использовать операторы сравнения над элементами исходного массива</li>
13
<li>Применить логическое отрицание к текущей маске - поменять True на False и наоборот</li>
13
<li>Применить логическое отрицание к текущей маске - поменять True на False и наоборот</li>
14
</ul><p>Так все три способа выглядят в коде:</p>
14
</ul><p>Так все три способа выглядят в коде:</p>
15
<p>Первый способ на практике встречается редко, потому что на ручное создание маски уходит слишком много времени, особенно при большом размере массива:</p>
15
<p>Первый способ на практике встречается редко, потому что на ручное создание маски уходит слишком много времени, особенно при большом размере массива:</p>
16
<h2>Как применять маску</h2>
16
<h2>Как применять маску</h2>
17
<p>Чтобы применить булеву маску к исходному массиву, достаточно подставить ее в качестве индекса:</p>
17
<p>Чтобы применить булеву маску к исходному массиву, достаточно подставить ее в качестве индекса:</p>
18
<p>Как мы говорили выше, в Python реализована функция filter(), которая применяется для итеративной фильтрации значений списка по условию:</p>
18
<p>Как мы говорили выше, в Python реализована функция filter(), которая применяется для итеративной фильтрации значений списка по условию:</p>
19
<p>Для итеративной фильтрации элементов массива numpy.ndarray используется другой способ - метод numpy.fromiter():</p>
19
<p>Для итеративной фильтрации элементов массива numpy.ndarray используется другой способ - метод numpy.fromiter():</p>
20
<p>На практике часто требуется не только убирать значения из исходного массива, но и заменять их. Для этого используется метод numpy.where():</p>
20
<p>На практике часто требуется не только убирать значения из исходного массива, но и заменять их. Для этого используется метод numpy.where():</p>
21
<p>Если для фильтрации мы используем составное условие, лучше инициализировать маску отдельно. Это упрощает поддержку и делает код более читабельным:</p>
21
<p>Если для фильтрации мы используем составное условие, лучше инициализировать маску отдельно. Это упрощает поддержку и делает код более читабельным:</p>
22
<p>В реальных данных регулярно возникают пропущенные значения. Это может происходить из-за человеческого фактора, сбоя в работе сервисов или ошибки при записи в базу данных. Для таких случаев в Numpy существует отдельный тип данных numpy.nan (not a number):</p>
22
<p>В реальных данных регулярно возникают пропущенные значения. Это может происходить из-за человеческого фактора, сбоя в работе сервисов или ошибки при записи в базу данных. Для таких случаев в Numpy существует отдельный тип данных numpy.nan (not a number):</p>
23
<p>Для корректной работы программ необходимо обнаруживать пропуски, чистить данные от них или заменять на значение по умолчанию.</p>
23
<p>Для корректной работы программ необходимо обнаруживать пропуски, чистить данные от них или заменять на значение по умолчанию.</p>
24
<p>Рассмотрим на примере. Сначала нужно обнаружить пропуски:</p>
24
<p>Рассмотрим на примере. Сначала нужно обнаружить пропуски:</p>
25
<p>Затем чистим данные от пропусков:</p>
25
<p>Затем чистим данные от пропусков:</p>
26
<p>Теперь заменяем пропуски на некоторое значение:</p>
26
<p>Теперь заменяем пропуски на некоторое значение:</p>
27
<h2>Как применять маску с двумерными массивами</h2>
27
<h2>Как применять маску с двумерными массивами</h2>
28
<p>Выше мы рассмотрели фильтрацию значений на примере одномерного массива. Те же принципы применимы и в работе с двумерными массивами. Рассмотрим пример задачи - подготовим сырые данные продаж магазина ноутбуков по следующим шагам:</p>
28
<p>Выше мы рассмотрели фильтрацию значений на примере одномерного массива. Те же принципы применимы и в работе с двумерными массивами. Рассмотрим пример задачи - подготовим сырые данные продаж магазина ноутбуков по следующим шагам:</p>
29
<ul><li>Сначала обнаружим выбросы двух типов - значения выше 200 и отрицательные значения. Число 200 выбрано потому, что именно столько ноутбуков хранится на складе. Менеджер магазина знает, что в день не бывает более 200 продаж</li>
29
<ul><li>Сначала обнаружим выбросы двух типов - значения выше 200 и отрицательные значения. Число 200 выбрано потому, что именно столько ноутбуков хранится на складе. Менеджер магазина знает, что в день не бывает более 200 продаж</li>
30
<li>Затем заменим выбросы и пропуски на среднее значение продаж</li>
30
<li>Затем заменим выбросы и пропуски на среднее значение продаж</li>
31
</ul><p>Мы проводим эти операции, чтобы подготовить сырые данные к более глубокому анализу с применением методов статистики и машинного обучения:</p>
31
</ul><p>Мы проводим эти операции, чтобы подготовить сырые данные к более глубокому анализу с применением методов статистики и машинного обучения:</p>
32
<p>Чтобы отфильтровать значения, нужно создать маски:</p>
32
<p>Чтобы отфильтровать значения, нужно создать маски:</p>
33
<p>Чтобы найти средние значения, нужно оставить только стандартные значения продаж. Сделать это можно маской, объединяющей логические отрицания сформированных масок:</p>
33
<p>Чтобы найти средние значения, нужно оставить только стандартные значения продаж. Сделать это можно маской, объединяющей логические отрицания сформированных масок:</p>
34
<p>Далее остается только заменить нестандартные значения на величину среднего:</p>
34
<p>Далее остается только заменить нестандартные значения на величину среднего:</p>
35
<h2>Выводы</h2>
35
<h2>Выводы</h2>
36
<p>В этом уроке мы разобрали методы поиска и отбора значений по определенному условию, которые часто применяются при работе с данными. Мы узнали, как искать элементы, неудовлетворяющие некоторому условию, а также отсутствующие элементы и пропуски. Это самые частые случаи при работе с реальными данными, поэтому важно знать, как с ним работать.</p>
36
<p>В этом уроке мы разобрали методы поиска и отбора значений по определенному условию, которые часто применяются при работе с данными. Мы узнали, как искать элементы, неудовлетворяющие некоторому условию, а также отсутствующие элементы и пропуски. Это самые частые случаи при работе с реальными данными, поэтому важно знать, как с ним работать.</p>
37
<p>Все рассмотренные методы применимы к массивам различной размерности. На примере матрицы заказов мы продемонстрировали подходы по поиску и исправлению некорректных значений в данных.</p>
37
<p>Все рассмотренные методы применимы к массивам различной размерности. На примере матрицы заказов мы продемонстрировали подходы по поиску и исправлению некорректных значений в данных.</p>