Сортировка данных в Pandas

PandasBeginner
Практиковаться сейчас

Введение

Добро пожаловать в лабораторную работу по сортировке данных с помощью Pandas! Сортировка является фундаментальной операцией в анализе данных. Она помогает организовать ваши данные, делая их более легкими для чтения, понимания и анализа. Независимо от того, нужно ли вам найти наивысшие или наинизшие значения, или просто упорядочить данные в логическом порядке, Pandas предоставляет мощные и гибкие инструменты для выполнения этой задачи.

В этой лабораторной работе вы научитесь использовать основные методы сортировки в Pandas:

  • sort_values(): Для сортировки DataFrame по значениям одного или нескольких столбцов.
  • sort_index(): Для сортировки DataFrame по его индексу.
  • reset_index(): Для сброса индекса после операции сортировки.

К концу этой лабораторной работы вы будете уверенно располагать свои данные в соответствии с вашими аналитическими потребностями. Давайте начнем!

Сортировка DataFrame по одному столбцу с помощью sort_values

На этом шаге вы изучите наиболее распространенную операцию сортировки: сортировку DataFrame по значениям в одном столбце. Для этого мы будем использовать метод sort_values(). Параметр by используется для указания столбца, по которому вы хотите выполнить сортировку.

Сначала откройте файл main.py, расположенный в каталоге ~/project, с помощью файлового менеджера слева. Этот файл уже содержит пример DataFrame.

Теперь добавьте следующий код в конец файла main.py для сортировки DataFrame по столбцу Age.

## --- Шаг 1: Сортировка по одному столбцу ---
df_sorted_by_age = df.sort_values(by='Age')
print("\nDataFrame, отсортированный по возрасту:")
print(df_sorted_by_age)

Ваш полный файл main.py теперь должен выглядеть следующим образом:

import pandas as pd

## Создаем пример DataFrame для наших упражнений
data = {
    'Name': ['Alice', 'Bob', 'Charlie', 'David', 'Eve'],
    'Age': [25, 22, 25, 28, 22],
    'Score': [85, 91, 88, 79, 91]
}
df = pd.DataFrame(data)

print("Исходный DataFrame:")
print(df)

## --- Шаг 1: Сортировка по одному столбцу ---
df_sorted_by_age = df.sort_values(by='Age')
print("\nDataFrame, отсортированный по возрасту:")
print(df_sorted_by_age)

Чтобы увидеть результат, запустите скрипт из терминала.

python3 main.py

Вы увидите исходный DataFrame, за которым последует новый DataFrame, отсортированный по возрасту в порядке возрастания.

Ожидаемый вывод:

Исходный DataFrame:
      Name  Age  Score
0    Alice   25     85
1      Bob   22     91
2  Charlie   25     88
3    David   28     79
4      Eve   22     91

DataFrame, отсортированный по возрасту:
      Name  Age  Score
1      Bob   22     91
4      Eve   22     91
0    Alice   25     85
2  Charlie   25     88
3    David   28     79

Сортировка по нескольким столбцам в порядке возрастания

На этом шаге вы научитесь сортировать DataFrame на основе нескольких столбцов. Это полезно, когда у вас есть одинаковые значения в первом столбце сортировки, и вы хотите применить вторичный критерий сортировки.

Для сортировки по нескольким столбцам передайте список имен столбцов в параметр by метода sort_values(). Pandas сначала отсортирует по первому столбцу в списке, а затем использует второй столбец для разрешения любых совпадений, и так далее.

Давайте отсортируем наш DataFrame сначала по Age, а затем по Score. Добавьте следующий код в конец вашего файла main.py.

## --- Шаг 2: Сортировка по нескольким столбцам ---
df_sorted_multiple = df.sort_values(by=['Age', 'Score'])
print("\nDataFrame, отсортированный сначала по возрасту, затем по оценке:")
print(df_sorted_multiple)

Теперь снова запустите скрипт, чтобы увидеть изменения.

python3 main.py

Вы увидите новый раздел в выводе. Обратите внимание, как две строки с Age 22 теперь отсортированы по Score (Боб с 91 идет после Евы с 91, поскольку их порядок стабилен). То же самое относится и к строкам с Age 25.

Ожидаемый вывод (показывает только новую часть):

...

DataFrame, отсортированный сначала по возрасту, затем по оценке:
      Name  Age  Score
1      Bob   22     91
4      Eve   22     91
0    Alice   25     85
2  Charlie   25     88
3    David   28     79

Сортировка в порядке убывания с ascending=False

На этом шаге вы научитесь управлять направлением сортировки. По умолчанию sort_values() сортирует в порядке возрастания. Вы можете изменить это, используя параметр ascending.

  • Для сортировки в порядке убывания установите ascending=False.
  • При сортировке по нескольким столбцам вы можете указать разный порядок для каждого столбца, передав список булевых значений, например, ascending=[True, False].

Давайте отсортируем DataFrame по Age в порядке возрастания и по Score в порядке убывания. Это поможет нам найти лучший результат в каждой возрастной группе. Добавьте следующий код в конец файла main.py.

## --- Шаг 3: Сортировка в порядке убывания и смешанном порядке ---
df_sorted_mixed = df.sort_values(by=['Age', 'Score'], ascending=[True, False])
print("\nDataFrame, отсортированный по возрасту (возр.) и оценке (убыв.):")
print(df_sorted_mixed)

Запустите скрипт, чтобы увидеть результат.

python3 main.py

В выводе посмотрите на строки для возраста 22. У Евы и Боба оба результата 91, поэтому их порядок может не измениться. Для возраста 25 Чарли (Score 88) теперь появляется перед Алисой (Score 85), потому что мы отсортировали оценки в порядке убывания.

Ожидаемый вывод (показывает только новую часть):

...

DataFrame, отсортированный по возрасту (возр.) и оценке (убыв.):
      Name  Age  Score
1      Bob   22     91
4      Eve   22     91
2  Charlie   25     88
0    Alice   25     85
3    David   28     79

Сортировка индекса с помощью sort_index

На этом шаге вы научитесь сортировать DataFrame по его индексу. После выполнения операции sort_values() индекс DataFrame перемешивается. Вы можете увидеть это в предыдущих выводах (например, индекс имеет вид 1, 4, 2, 0, 3).

Метод sort_index() позволяет сортировать DataFrame на основе его меток индекса, восстанавливая исходный порядок, если индекс представлял собой простой диапазон.

Возьмем результат предыдущего шага (df_sorted_mixed) и отсортируем его по индексу. Добавьте следующий код в конец файла main.py.

## --- Шаг 4: Сортировка по индексу ---
## Предыдущий результат (df_sorted_mixed) имеет перемешанный индекс. Отсортируем его по индексу.
df_reordered_by_index = df_sorted_mixed.sort_index()
print("\nDataFrame, повторно отсортированный по индексу:")
print(df_reordered_by_index)

Запустите скрипт.

python3 main.py

Вы увидите, что DataFrame теперь отсортирован по своему индексу (0, 1, 2, 3, 4), что фактически восстанавливает его исходный порядок строк.

Ожидаемый вывод (показывает только новую часть):

...

DataFrame, повторно отсортированный по индексу:
      Name  Age  Score
0    Alice   25     85
1      Bob   22     91
2  Charlie   25     88
3    David   28     79
4      Eve   22     91

Сброс индекса после сортировки с помощью reset_index

На этом заключительном шаге вы научитесь сбрасывать индекс DataFrame. После сортировки индекс больше не является чистым последовательным диапазоном, начинающимся с 0. Хотя sort_index() может восстановить исходный порядок, иногда требуется сохранить новый отсортированный порядок, но при этом иметь новый, последовательный индекс.

Метод reset_index() идеально подходит для этой задачи. Он заменяет текущий индекс стандартным целочисленным индексом (0, 1, 2, ...). Часто используется параметр drop=True для полного удаления старого индекса. Если вы не используете drop=True, старый индекс будет добавлен как новый столбец с именем index.

Возьмем один из наших отсортированных DataFrame (df_sorted_mixed) и сбросим его индекс. Добавьте последний фрагмент кода в main.py.

## --- Шаг 5: Сброс индекса после сортировки ---
## Возьмем отсортированный DataFrame и присвоим ему новый, чистый индекс
df_with_reset_index = df_sorted_mixed.reset_index(drop=True)
print("\nОтсортированный DataFrame с сброшенным индексом:")
print(df_with_reset_index)

Запустите скрипт в последний раз.

python3 main.py

Наблюдайте за финальным выводом. DataFrame по-прежнему отсортирован по возрасту (возр.) и оценке (убыв.), но теперь индекс представляет собой чистую последовательность от 0 до 4.

Ожидаемый вывод (показывает только новую часть):

...

Отсортированный DataFrame с сброшенным индексом:
      Name  Age  Score
0      Bob   22     91
1      Eve   22     91
2  Charlie   25     88
3    Alice   25     85
4    David   28     79

Резюме

Поздравляем с завершением лабораторной работы по сортировке данных в Pandas! Вы освоили основные навыки организации и упорядочивания данных в DataFrame Pandas.

В этой лабораторной работе вы практиковались в:

  • Сортировке по одному столбцу с использованием sort_values(by='column_name').
  • Сортировке по нескольким столбцам, передавая список параметру by.
  • Управлении направлением сортировки с помощью параметра ascending.
  • Восстановлении исходного порядка путем сортировки индекса с помощью sort_index().
  • Создании нового, чистого индекса для отсортированного DataFrame с использованием reset_index(drop=True).

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