Индекс в 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.