Индексы в Pandas

Введение в индексацию в Pandas, создание и изменение индексов, особенности работы

Индексация – это способ идентификации и доступа к данным. В Pandas индексы играют ключевую роль, позволяя быстро и эффективно работать с данными, осуществлять выборку, изменять и агрегировать информацию.

Основы работы с индексами

Каждый DataFrame и Series в Pandas имеет индекс. По умолчанию при создании DataFrame используется целочисленный индекс, начинающийся с нуля.

import pandas as pd

data = pd.Series([10, 20, 30, 40])
print(data.index)  # RangeIndex(start=0, stop=4, step=1)

Создание индексов

Вы можете задать свой индекс при создании DataFrame или Series:

import pandas as pd

data = pd.Series([10, 20, 30, 40], index=['a', 'b', 'c', 'd'])
print(data)

То же самое справедливо и для DataFrame:

import pandas as pd

df = pd.DataFrame({
    'Name': ['Anna', 'Bob', 'Charlie'],
    'Age': [25, 30, 35]
}, index=['ID1', 'ID2', 'ID3'])
print(df)

#         Name  Age
# ID1     Anna   25
# ID2      Bob   30
# ID3  Charlie   35

Изменение индексов

Индексы можно изменить после создания DataFrame:

df = pd.DataFrame({
    'Name': ['Anna', 'Bob', 'Charlie'],
    'Age': [25, 30, 35]
}, index=['ID1', 'ID2', 'ID3'])

df.index = ['new1', 'new2', 'new3']
print(df)

#          Name  Age
# new1     Anna   25
# new2      Bob   30
# new3  Charlie   35

Также можно использовать метод set_index() для задания одного из столбцов в качестве индекса:

import pandas as pd

df = pd.DataFrame({
    'Name': ['Anna', 'Bob', 'Charlie'],
    'Age': [25, 30, 35]
}, index=['ID1', 'ID2', 'ID3'])

df.index = ['new1', 'new2', 'new3']

df = df.set_index('Name')
print(df)

#          Age
# Name        
# Anna      25
# Bob       30
# Charlie   35

Индексация и выборка данных

С индексами можно легко выбирать данные:

data = pd.Series([10, 20, 30, 40], index=['a', 'b', 'c', 'd'])
print(data['b'])  # Output: 20

Для DataFrame:

df = pd.DataFrame({
    'Name': ['Anna', 'Bob', 'Charlie'],
    'Age': [25, 30, 35]
}, index=['ID1', 'ID2', 'ID3'])

df = df.set_index('Name')
print(df.loc['Anna'])

# Age    25
# Name: Anna, dtype: int64

Сброс индекса

Если вы хотите вернуть DataFrame к индексу по умолчанию (целочисленному), вы можете использовать метод reset_index():

df = pd.DataFrame({
    'Name': ['Anna', 'Bob', 'Charlie'],
    'Age': [25, 30, 35]
}, index=['ID1', 'ID2', 'ID3'])

df = df.set_index('Name')
df_reset = df.reset_index()
print(df_reset)

#       Name  Age
# 0     Anna   25
# 1      Bob   30
# 2  Charlie   35

Этот метод также может быть полезен, когда индекс имеет значения, которые вы хотели бы преобразовать обратно в столбец.

Работа с иерархическими индексами

Иерархическая индексация позволяет иметь несколько уровней индексов:

index = pd.MultiIndex.from_tuples([('A', 1), ('A', 2), ('B', 1), ('B', 2)])
data = pd.Series([1, 2, 3, 4], index=index)
print(data)

# A  1    1
#    2    2
# B  1    3
#    2    4
# dtype: int64

Выбор данных с иерархическим индексом:

index = pd.MultiIndex.from_tuples([('A', 1), ('A', 2), ('B', 1), ('B', 2)])
data = pd.Series([1, 2, 3, 4], index=index)
print(data['A', 1])  # 1

Методы индекса

Индексы в Pandas имеют свои методы и атрибуты, например:

  • is_unique: Проверка уникальности значений в индексе.
  • has_duplicates: Проверка наличия дубликатов в индексе.
  • get_loc: Получение местоположения значения в индексе.

Реиндексация

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

df1 = pd.DataFrame({'A': [1, 2, 3]}, index=['a', 'b', 'c'])
df2 = df1.reindex(['a', 'b', 'c', 'd'])
print(df2)

#      A
# a  1.0
# b  2.0
# c  3.0
# d  NaN

Операции с индексами

Операции, такие как объединение, можно выполнить с учетом индексов:

df1 = pd.DataFrame({'A': [1, 2, 3]}, index=['a', 'b', 'c'])
df2 = pd.DataFrame({'B': [4, 5, 6]}, index=['a', 'b', 'd'])
result = df1.join(df2, how='outer')  # объединение по индексам
print(result)

#      A    B
# a  1.0  4.0
# b  2.0  5.0
# c  3.0  NaN
# d  NaN  6.0

Особенности индексов

  • Уникальность: Индексы не обязаны быть уникальными, но уникальные индексы повышают производительность операций.
  • Неизменяемость: Индексы являются неизменяемыми, что делает структуру данных более безопасной.
  • Иерархическая индексация: Pandas поддерживает многомерные индексы или иерархическую индексацию, что позволяет работать с высокоразмерными данными в привычной двумерной форме.

Заключение

Индексы в Pandas – это мощный инструмент для работы с данными. Благодаря гибкости индексации вы можете эффективно организовывать, выбирать и агрегировать свои данные, делая анализ данных более производительным и удобным.

Содержание: