Индексация – это способ идентификации и доступа к данным. В 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 – это мощный инструмент для работы с данными. Благодаря гибкости индексации вы можете эффективно организовывать, выбирать и агрегировать свои данные, делая анализ данных более производительным и удобным.
Содержание: