Индекс в Pandas

Индекс — это «метки строк» таблицы или Series. Он позволяет быстро искать строки по ключу, выравнивать данные при объединении и хранить смысл «первичного ключа» прямо в структуре. По умолчанию Pandas создаёт целочисленный RangeIndex 0..N-1, но его легко заменить на любой массив значений.

Когда использовать

  • Уникальный идентификатор (серийный номер устройства, время).

  • Сортировка/слайсы по логичному ключу, а не по позиции.

  • Подготовка к join/merge по индексу.

Пример 1. Авто-индекс

import pandas as pd

df = pd.DataFrame({"x": [10, 20, 30]})
print(df.index)

Output:

RangeIndex(start=0, stop=3, step=1)

Пример 2. Свой индекс при создании

import pandas as pd

df = pd.DataFrame(
    {"battery": [3.7, 3.6, 3.5]},
    index=["bot1", "bot2", "bot3"],
)
print(df)

Output:

      battery
bot1      3.7
bot2      3.6
bot3      3.5

Пример 3. set_index из столбца

import pandas as pd

df = pd.DataFrame({
    "device": ["bot1", "bot2"],
    "battery": [3.7, 3.6],
})
df2 = df.set_index("device")
print(df2)

Output:

        battery
device
bot1        3.7
bot2        3.6

Пример 4. reset_index

import pandas as pd

df = pd.DataFrame({"v": [1, 2, 3]}, index=["a", "b", "c"])
print(df.reset_index())

Output:

  index  v
0     a  1
1     b  2
2     c  3

Параметр drop=True удалит старый индекс вместо превращения его в столбец.

Пример 5. loc по индексу

import pandas as pd

df = pd.DataFrame({"v": [10, 20, 30]}, index=["a", "b", "c"])
print(df.loc["b"])

Output:

v    20
Name: b, dtype: int64

Пример 6. Сортировка по индексу

import pandas as pd

df = pd.DataFrame({"v": [1, 2, 3]}, index=["c", "a", "b"])
print(df.sort_index())

Output:

   v
a  2
b  3
c  1

Пример 7. Проверка уникальности

import pandas as pd

df = pd.DataFrame({"v": [1, 2, 3]}, index=["a", "a", "b"])
print("уникален?", df.index.is_unique)

Output:

уникален? False

Дублирующиеся индексы допустимы, но ломают join и часть операций.

Подводные камни

  • Многие методы возвращают новый объект — не забудьте присвоить: df = df.set_index(...) или используйте inplace=True.

  • После groupby ключ становится индексом — для удобства иногда нужен reset_index().

  • Срезы df.loc["a":"c"] включают правую границу (в отличие от позиционных).

См. также

Примечание

Лицензия и источники

Техническое описание адаптировано из официальной документации Pandas (https://pandas.pydata.org/docs/), BSD-3-Clause License. Перевод на русский, примеры и пояснения — © AlashEd Wiki.