Название или название столбца индекса панд

Как я могу получить имя столбца индекса в пандах 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.columns.values также дайте нам имена столбцов

Решение для мультииндексов находится внутри циклопического ответа Джезраэль, но мне потребовалось некоторое время, чтобы найти его, поэтому я публикую новый ответ:

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'

Другие вопросы по тегам