Название или название столбца индекса панд
Как я могу получить имя столбца индекса в пандах Python? Вот пример кадра данных:
Column 1
Index Title
Apples 1
Oranges 2
Puppies 3
Ducks 4
То, что я пытаюсь сделать, это получить / установить заголовок индекса данных. Вот что я попробовал:
import pandas as pd
data = {'Column 1' : [1., 2., 3., 4.],
'Index Title' : ["Apples", "Oranges", "Puppies", "Ducks"]}
df = pd.DataFrame(data)
df.index = df["Index Title"]
del df["Index Title"]
print df
Кто-нибудь знает, как это сделать?
11 ответов
Вы можете просто получить / установить индекс через его name
имущество
In [7]: df.index.name
Out[7]: 'Index Title'
In [8]: df.index.name = 'foo'
In [9]: df.index.name
Out[9]: 'foo'
In [10]: df
Out[10]:
Column 1
foo
Apples 1
Oranges 2
Puppies 3
Ducks 4
От версии 0.18.0
ты можешь использовать rename_axis
:
print df
Column 1
Index Title
Apples 1.0
Oranges 2.0
Puppies 3.0
Ducks 4.0
Новая функциональность хорошо работает в цепочках методов.
print df.rename_axis('foo')
Column 1
foo
Apples 1.0
Oranges 2.0
Puppies 3.0
Ducks 4.0
Вы также можете переименовать имена столбцов с параметром axis
:
print df
Col Name Column 1
Index Title
Apples 1.0
Oranges 2.0
Puppies 3.0
Ducks 4.0
print df.rename_axis('foo').rename_axis("bar", axis="columns")
bar Column 1
foo
Apples 1.0
Oranges 2.0
Puppies 3.0
Ducks 4.0
print df.rename_axis('foo').rename_axis("bar", axis=1)
bar Column 1
foo
Apples 1.0
Oranges 2.0
Puppies 3.0
Ducks 4.0
df.index.name
должен сделать свое дело.
Python имеет dir
функция, которая позволяет вам запрашивать атрибуты объекта. dir(df.index)
было полезно здесь.
Если вы не хотите создавать новую строку, а просто поместите ее в пустую ячейку, используйте:
df.columns.name = 'foo'
В противном случае используйте:
df.index.name = 'foo'
Использование df.index.rename('foo', inplace=True)
установить имя индекса.
Кажется, этот API доступен начиная с версии 0.13.
Установка имени индекса также может быть выполнена при создании:
pd.DataFrame(data={'age': [10,20,30], 'height': [100, 170, 175]}, index=pd.Series(['a', 'b', 'c'], name='Tag'))
Решение для мультииндексов находится внутри циклопического ответа Джезраэль, но мне потребовалось некоторое время, чтобы найти его, поэтому я публикую новый ответ:
df.index.names
дает имена мультииндекса (как Frozenlist).
Чтобы просто получить имена столбцов индекса df.index.names
будет работать как для одного индекса, так и для MultiIndex в самой последней версии pandas.
Как человек, который нашел это, пытаясь найти лучший способ получить список имен индексов + имена столбцов, я нашел бы этот ответ полезным:
names = list(filter(None, df.index.names + df.columns.values.tolist()))
Это работает без индекса, индекса с одним столбцом или MultiIndex. Он позволяет избежать вызова reset_index(), который снижает производительность такой простой операции. Я удивлен, что для этого нет встроенного метода (с которым я сталкивался). Думаю, мне это нужно чаще, потому что я перемещаю данные из баз данных, где индекс фрейма данных сопоставляется с первичным / уникальным ключом, но на самом деле для меня это просто еще один столбец.
1. Используйтеpd.Index
назвать индекс (или столбец) из конструкции
Панды имеютIndex
(MultiIndex
) объекты, принимающие имена. Передача их в качестве индекса или столбца при построении фрейма данных создает фреймы с именованными индексами/столбцами.
data = {'Column 1': [1,2,3,4], 'Index Title': ["Apples","Oranges","Puppies","Ducks"]}
# for RangeIndex
df = pd.DataFrame(data, index=pd.Index(range(4), name='foo'))
# ^^^^^^^^ <---- here
# for Index
df = pd.DataFrame(data, index=pd.Index(data['Index Title'], name='foo'))
# ^^^^^^^^ <---- here
# for columns
df = pd.DataFrame(data, columns=pd.Index(data.keys(), name='foo'))
# ^^^^^^^^ <---- here
# for MultiIndex
df = pd.DataFrame(data, index=pd.MultiIndex.from_arrays([['Fruit', 'Fruit', 'Animal', 'Animal'], data['Index Title']], names=['foo', 'bar']))
# ^^^^^^^^^^^^^ <---- here
2. Измените имя уровня MultiIndex.
Если фрейм данных имеет MultiIndex и необходимо изменить имя индекса на определенном уровне,index.set_names
может быть использовано. Например, чтобы изменить имя второго уровня индекса, используйте следующее. Не забывайinplace=True
.
df.index.set_names('foo', level=1, inplace=True)
# equivalently, rename could be used with a dict
df.index.rename({'Index Title 2': 'foo'}, inplace=True)
set_names
также может использоваться только для обычного индекса (установитеlevel=None
). Однако,rename_axis
наверное, проще.
df.index.set_names('foo', level=None, inplace=True)
# equivalent to the following
df.index.name = 'foo'
df = df.rename_axis('foo')
Есть соответствующееcolumns.set_names
для колонн.
df.columns.set_names('foo', level=None, inplace=True)
# equivalent to
df = df.rename_axis(columns='foo')
# for MultiIndex columns
df.columns.set_names('foo', level=0, inplace=True)
Согласно турне Kaggle Pandas, следующие работы:
df.rename_axis('new_name', axis='rows')
reviews.index.name # now returns 'wines'