Новое Распределяем каналы MAX по категориям и территориям. Читать новость

📚 Pandas. Индексы и доступ к данным



Учимся ориентироваться в данных: выбирать строки и столбцы, понимать индексы и правильно к ним обращаться.

🔢 Индекс в Pandas

Индекс — это метки (label) строк, отдельная сущность, не входящая в состав колонок. Он служит для идентификации строк и быстрого доступа к ним.

Если индекс не задан явно, Pandas создаёт RangeIndex — стандартный числовой индекс от 0 до N-1 с шагом 1. Он работает по принципу range(), хранит только параметры start, stop, step и поэтому не занимает память. RangeIndex неизменяемый, но его можно переопределить, задав свой индекс.

import pandas as pd

df = pd.DataFrame({'город': ['Москва', 'Сочи']})
print(df.index) # RangeIndex(start=0, stop=2, step=1)


Типы индексов могут быть:
- Числовые (0, 1, 2...)
- Строковые ('a', 'b', 'c')
- Временные (2023-01-01, 2023-01-02)

Индекс может быть неуникальным (содержать повторяющиеся метки)

Альтернативы RangeIndex:
- DatetimeIndex (для временных рядов)
- MultiIndex (иерархический)
- CategoricalIndex (для категориальных меток)

🎯 Польза индекса

1. Быстрый доступ по метке — df.loc['a'] вместо запоминания номера строки
2. Автоматическое выравнивание — при объединении данных Pandas сопоставляет строки по индексам
3. Срез по меткам — удобная выборка диапазонов (например, df.loc['2020':'2022'])
4. Смысловая нагрузка — индекс может быть id, датой и т.д.

📍 Доступ к данным: .loc и .iloc

В Pandas два основных метода выбора данных:

- `.loc[]` — выбор по меткам (именам) строк и столбцов
Включает правую границу среза (закрытый интервал). Это удобно, когда метки — не числа (например, даты или буквы): хочется получить все строки от 'a' до 'c' включительно.

- `.iloc[]` — выбор по позициям (целым числам)
Исключает правую границу (как в Python-срезах). Это естественно для позиционной индексации, где привычно, что [0:2] берёт элементы с индексами 0 и 1.

df = pd.DataFrame({'город': ['Москва', 'Казань', 'Сочи'],
'год': [2020, 2021, 2022]},
index=['a', 'b', 'c'])
print(df)
# город год
# a Москва 2020
# b Казань 2021
# c Сочи 2022


Выбор по меткам — `.loc`

# Одна строка по метке
print(df.loc['b'])
# город Казань
# год 2021

# Несколько строк по меткам
print(df.loc[['a', 'c']])
# город год
# a Москва 2020
# c Сочи 2022

# Срез по меткам (включая правую границу!)
print(df.loc['a':'b'])
# город год
# a Москва 2020
# b Казань 2021


Выбор по позициям — `.iloc`

# Первая строка (позиция 0)
print(df.iloc[0])
# город Москва
# год 2020

# Несколько строк по позициям
print(df.iloc[[0, 2]])
# город год
# a Москва 2020
# c Сочи 2022

# Срез по позициям (правая граница не включается)
print(df.iloc[0:2])
# город год
# a Москва 2020
# b Казань 2021

Выбор конкретных ячеек

Можно указать и строку, и столбец:

# .loc[метка_строки, метка_столбца]
print(df.loc['b', 'город']) # Казань

# .iloc[позиция_строки, позиция_столбца]
print(df.iloc[1, 0]) # Казань (строка 1, столбец 0)


Все строки, конкретный столбец:

print(df.loc[:, 'город']) # все города
print(df.iloc[:, 0]) # первый столбец

Конкретные строки и столбцы:

print(df.loc[['a', 'c'], ['город']])
# город
# a Москва
# c Сочи


🔄 Установка и сброс индекса

Сделать столбец индексом — `.set_index()`

df = pd.DataFrame({'id': [101, 102, 103],
'город': ['Москва', 'Казань', 'Сочи']})
print(df)
# id город
# 0 101 Москва
# 1 102 Казань
# 2 103 Сочи


df_indexed = df.set_index('id')
print(df_indexed)
# город
# id
# 101 Москва
# 102 Казань
# 103 Сочи


Вернуть индекс обратно в столбец — `.reset_index()`

df_reset = df_indexed.reset_index()
print(df_reset)
# id город
# 0 101 Москва
# 1 102 Казань
# 2 103 Сочи


Параметр drop=True удаляет старый индекс без сохранения в столбец:

df_reset = df_indexed.reset_index(drop=True)
print(df_reset)
# город
# 0 Москва
# 1 Казань
# 2 Сочи

💬 Далее:
Pandas vs SQL
Просмотры: 335
Открыть в MAX Сообщить о неточности

Сообщить о неточности

Опишите, что нужно исправить. Если есть источник, добавьте ссылку.

Вы покидаете datool.ru

Ссылка ведёт на внешний сайт. datool.ru не отвечает за его содержимое — проверьте адрес, прежде чем вводить пароли или платёжные данные.

Переход через 10 с

Перейти