Сортировка, фильтрация и условное форматирование
Три инструмента, которые превращают кучу строк в понятную картину
Когда в таблице десять строк, глазами видно всё. Когда их триста, нужны помощники: сортировка наводит порядок, фильтр прячет лишнее, а условное форматирование само подсвечивает то, на что стоит обратить внимание. Это базовый набор любого, кто разбирает данные — от школьной ведомости до отчёта о продажах.
Сортировка переставляет строки по значению столбца (по возрастанию или убыванию). Фильтр временно показывает только те строки, что удовлетворяют условию. Условное форматирование меняет вид ячейки (цвет, заливку) по заданному правилу, не трогая само значение.
Будем работать с одной таблицей — список учеников и их баллов за контрольную:
| A (имя) | B (класс) | C (балл) | |
|---|---|---|---|
| 1 | Аня | 9А | 72 |
| 2 | Борис | 9Б | 88 |
| 3 | Вера | 9А | 54 |
| 4 | Глеб | 9Б | 91 |
| 5 | Дина | 9А | 88 |
Сортировка: наводим порядок
Сортировка переставляет строки целиком, ориентируясь на выбранный столбец. Важно: переезжает вся строка, а не один столбец — иначе имена «оторвались» бы от баллов. Отсортируем по столбцу C (балл) по убыванию, чтобы лучшие оказались сверху:
| A (имя) | B (класс) | C (балл) | |
|---|---|---|---|
| 1 | Глеб | 9Б | 91 |
| 2 | Борис | 9Б | 88 |
| 3 | Дина | 9А | 88 |
| 4 | Аня | 9А | 72 |
| 5 | Вера | 9А | 54 |
Глеб с 91 баллом наверху, Вера с 54 — внизу. Заметьте: Борис и Дина набрали по 88. Кто из них выше? При сортировке только по одному ключу их порядок не определён строго — поэтому часто нужен второй ключ.
Сортировка по нескольким ключам
Сортировка по нескольким ключам работает так: сначала строки упорядочиваются по первому столбцу, а среди строк с одинаковым значением — по второму. Отсортируем сначала по классу B (по возрастанию: 9А раньше 9Б), а внутри класса — по баллу C (по убыванию):
| A (имя) | B (класс) | C (балл) | |
|---|---|---|---|
| 1 | Дина | 9А | 88 |
| 2 | Аня | 9А | 72 |
| 3 | Вера | 9А | 54 |
| 4 | Глеб | 9Б | 91 |
| 5 | Борис | 9Б | 88 |
Сначала идут все из 9А (по убыванию балла), затем все из 9Б. Так строят рейтинги, где важна и группа, и место внутри неё.
Фильтр: показываем только нужное
Фильтр не переставляет и не удаляет строки — он временно прячет те, что не подходят под условие. Снимете фильтр — все строки вернутся. Зададим условие «балл больше 70» (отличники и хорошисты) на исходной таблице:
| A (имя) | B (класс) | C (балл) | |
|---|---|---|---|
| 1 | Аня | 9А | 72 |
| 2 | Борис | 9Б | 88 |
| 4 | Глеб | 9Б | 91 |
| 5 | Дина | 9А | 88 |
Вера (54) и её строка 3 скрылись — номера строк подсказывают, что данные на месте, просто не показаны. Условия бывают и сложнее: «балл больше 70 И класс = 9А» оставило бы только Аню и Дину.
Условное форматирование: пусть таблица подсвечивает сама
Условное форматирование задаёт правило вида «если ячейка удовлетворяет условию — раскрась её так-то». Само число не меняется, меняется только его вид. Типичное правило для нашей таблицы: «балл меньше 60 — красным» (двойка), «балл 85 и выше — зелёным» (отлично).
| A (имя) | C (балл) | Подсветка по правилу | |
|---|---|---|---|
| 1 | Аня | 72 | без цвета (60–84) |
| 2 | Борис | 88 | зелёный (≥85) |
| 3 | Вера | 54 | красный (<60) |
| 4 | Глеб | 91 | зелёный (≥85) |
| 5 | Дина | 88 | зелёный (≥85) |
Удобство в том, что правило живёт постоянно: измените балл Веры на 65 — красная заливка пропадёт сама. Глаз сразу цепляется за цвет, и в таблице на сотни строк проблемные места видно мгновенно.
Зачем это для анализа данных
Вместе три инструмента отвечают на разные вопросы. Сортировка — «кто лучший/худший, как ранжируются строки». Фильтр — «покажи только тех, кто подходит под условие». Условное форматирование — «где находятся выбросы и проблемы, не вчитываясь в числа». Аналитик обычно сочетает их: отфильтровал нужную группу, отсортировал по ключевому показателю, подсветил аномалии — и картина готова.
Проверим всё кодом
Таблица — это, по сути, список строк, а строка — набор именованных полей. В Python это удобно представить списком словарей. Ниже мы повторим ровно те же действия: отсортируем по баллу, отсортируем по двум ключам и отфильтруем. Запустите и сверьте вывод с таблицами выше.
ucheniki = [
{"imya": "Аня", "klass": "9А", "ball": 72},
{"imya": "Борис", "klass": "9Б", "ball": 88},
{"imya": "Вера", "klass": "9А", "ball": 54},
{"imya": "Глеб", "klass": "9Б", "ball": 91},
{"imya": "Дина", "klass": "9А", "ball": 88},
]
# Сортировка по баллу по убыванию (reverse=True)
po_ballu = sorted(ucheniki, key=lambda u: u["ball"], reverse=True)
print("По баллу (убывание):")
for u in po_ballu:
print(" ", u["imya"], u["ball"])
# Сортировка по двум ключам: класс по возрастанию, балл по убыванию
# Минус перед баллом переворачивает порядок внутри класса
po_dvum = sorted(ucheniki, key=lambda u: (u["klass"], -u["ball"]))
print("По классу, затем по баллу:")
for u in po_dvum:
print(" ", u["klass"], u["imya"], u["ball"])
# Фильтр: оставить только балл больше 70
otobrannye = [u for u in ucheniki if u["ball"] > 70]
print("Балл больше 70:")
for u in otobrannye:
print(" ", u["imya"], u["ball"])
По баллу (убывание): Глеб 91 Борис 88 Дина 88 Аня 72 Вера 54 По классу, затем по баллу: 9А Дина 88 9А Аня 72 9А Вера 54 9Б Глеб 91 9Б Борис 88 Балл больше 70: Аня 72 Борис 88 Глеб 91 Дина 88
Вывод полностью совпал с таблицами: sorted с ключом — это сортировка, а списковое включение с if — это фильтр. Трюк с -u["ball"] внутри кортежа даёт сортировку по второму ключу в обратную сторону, как раз для рейтинга «по классу, потом по убыванию балла».
Частые ошибки
- Сортировать один столбец отдельно от остальных — тогда имена и баллы перемешаются. В таблице всегда сортируют строки целиком.
- Путать фильтр с удалением: фильтр только прячет строки, данные никуда не деваются.
- Сортировать числа, записанные как текст: «100» окажется раньше «9», потому что сравниваются символы, а не значения.
- Думать, что условное форматирование меняет само число. Оно меняет только вид ячейки.
Коротко
- Сортировка переставляет строки целиком по значению столбца — по возрастанию или убыванию.
- По нескольким ключам: сначала по первому столбцу, при равенстве — по второму.
- Фильтр временно показывает только строки, подходящие под условие; остальные скрыты, но не удалены.
- Условное форматирование подсвечивает ячейки по правилу, не меняя их значений.
- В Python то же самое делают
sorted(..., key=...)и списковое включение сif.