팬더 색인 열 제목 또는 이름


255

python pandas에서 색인 열 이름을 어떻게 얻습니까? 예제 데이터 프레임은 다음과 같습니다.

             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

이 작업을 수행하는 방법을 아는 사람이 있습니까?

답변:


367

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

10
현재 (0.16)에서는 작동하지 않습니다. 또는 오히려 작동하지만 DataFrame이 수정되는 즉시 색인 이름이 지워집니다.
Piotr Migdal

11
DataFrame 생성시 인덱스 이름을 지정할 수 있어야합니다. 예 pd.DataFrame(values,index={"INDEX_NAME":index_values}). 이것이 왜 허용되지 않거나 구현되지 않았는지 이해하지 못합니까?
denfromufa

1
직접 이름을 추가 할 색인으로 구성 할 수 있습니다
제프

@Jeff, 나는에 동의하지만 먼저 인덱스를 구성하는 (그리고 dataframe의 인덱스와 열을 위해 사용하는) 올바른 접근 방법이라고 당신의 관찰과 같은 외모 @denfromufapandas.DataFrame에서 구성하는 것이 매개 변수로 DICT을해야
디에고 아구아

3
다중 색인 인 경우 df.index.names대신을 사용하십시오 df.index.name.
Jasha

75

를 사용 rename_axis하여 다음을 제거 할 수 있습니다 None.

d = {'Index Title': ['Apples', 'Oranges', 'Puppies', 'Ducks'],'Column 1': [1.0, 2.0, 3.0, 4.0]}
df = pd.DataFrame(d).set_index('Index Title')
print (df)
             Column 1
Index Title          
Apples            1.0
Oranges           2.0
Puppies           3.0
Ducks             4.0

print (df.index.name)
Index Title

print (df.columns.name)
None

새로운 기능은 메소드 체인에서 잘 작동합니다.

df = df.rename_axis('foo')
print (df)
         Column 1
foo              
Apples        1.0
Oranges       2.0
Puppies       3.0
Ducks         4.0

매개 변수를 사용하여 열 이름을 바꿀 수도 있습니다 axis.

d = {'Index Title': ['Apples', 'Oranges', 'Puppies', 'Ducks'],'Column 1': [1.0, 2.0, 3.0, 4.0]}
df = pd.DataFrame(d).set_index('Index Title').rename_axis('Col Name', axis=1)
print (df)
Col Name     Column 1
Index Title          
Apples            1.0
Oranges           2.0
Puppies           3.0
Ducks             4.0

print (df.index.name)
Index Title

print (df.columns.name)
Col Name
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

버전 pandas 0.24.0+에서 가능 매개 변수 indexcolumns:

df = df.rename_axis(index='foo', columns="bar")
print (df)
bar      Column 1
foo              
Apples        1.0
Oranges       2.0
Puppies       3.0
Ducks         4.0

인덱스 및 열 이름을 제거하면 다음과 같이 설정됩니다 None.

df = df.rename_axis(index=None, columns=None)
print (df)
         Column 1
Apples        1.0
Oranges       2.0
Puppies       3.0
Ducks         4.0

만약 MultiIndex만 지수 :

mux = pd.MultiIndex.from_arrays([['Apples', 'Oranges', 'Puppies', 'Ducks'],
                                  list('abcd')], 
                                  names=['index name 1','index name 1'])


df = pd.DataFrame(np.random.randint(10, size=(4,6)), 
                  index=mux, 
                  columns=list('ABCDEF')).rename_axis('col name', axis=1)
print (df)
col name                   A  B  C  D  E  F
index name 1 index name 1                  
Apples       a             5  4  0  5  2  2
Oranges      b             5  8  2  5  9  9
Puppies      c             7  6  0  7  8  3
Ducks        d             6  5  0  1  6  0

print (df.index.name)
None

print (df.columns.name)
col name

print (df.index.names)
['index name 1', 'index name 1']

print (df.columns.names)
['col name']

df1 = df.rename_axis(('foo','bar'))
print (df1)
col name     A  B  C  D  E  F
foo     bar                  
Apples  a    5  4  0  5  2  2
Oranges b    5  8  2  5  9  9
Puppies c    7  6  0  7  8  3
Ducks   d    6  5  0  1  6  0

df2 = df.rename_axis('baz', axis=1)
print (df2)
baz                        A  B  C  D  E  F
index name 1 index name 1                  
Apples       a             5  4  0  5  2  2
Oranges      b             5  8  2  5  9  9
Puppies      c             7  6  0  7  8  3
Ducks        d             6  5  0  1  6  0

df2 = df.rename_axis(index=('foo','bar'), columns='baz')
print (df2)
baz          A  B  C  D  E  F
foo     bar                  
Apples  a    5  4  0  5  2  2
Oranges b    5  8  2  5  9  9
Puppies c    7  6  0  7  8  3
Ducks   d    6  5  0  1  6  0

인덱스 및 열 이름을 제거하면 다음과 같이 설정됩니다 None.

df2 = df.rename_axis(index=(None,None), columns=None)
print (df2)

           A  B  C  D  E  F
Apples  a  6  9  9  5  4  6
Oranges b  2  6  7  4  3  5
Puppies c  6  3  6  3  5  1
Ducks   d  4  9  1  3  0  5

들어 MultiIndex인덱스와 열의에 필요한 작업입니다 .names대신 .name하고 목록 또는 튜플로 세트 :

mux1 = pd.MultiIndex.from_arrays([['Apples', 'Oranges', 'Puppies', 'Ducks'],
                                  list('abcd')], 
                                  names=['index name 1','index name 1'])


mux2 = pd.MultiIndex.from_product([list('ABC'),
                                  list('XY')], 
                                  names=['col name 1','col name 2'])

df = pd.DataFrame(np.random.randint(10, size=(4,6)), index=mux1, columns=mux2)
print (df)
col name 1                 A     B     C   
col name 2                 X  Y  X  Y  X  Y
index name 1 index name 1                  
Apples       a             2  9  4  7  0  3
Oranges      b             9  0  6  0  9  4
Puppies      c             2  4  6  1  4  4
Ducks        d             6  6  7  1  2  8

확인 / 설정 값에는 복수가 필요합니다.

print (df.index.name)
None

print (df.columns.name)
None

print (df.index.names)
['index name 1', 'index name 1']

print (df.columns.names)
['col name 1', 'col name 2']

df1 = df.rename_axis(('foo','bar'))
print (df1)
col name 1   A     B     C   
col name 2   X  Y  X  Y  X  Y
foo     bar                  
Apples  a    2  9  4  7  0  3
Oranges b    9  0  6  0  9  4
Puppies c    2  4  6  1  4  4
Ducks   d    6  6  7  1  2  8

df2 = df.rename_axis(('baz','bak'), axis=1)
print (df2)
baz                        A     B     C   
bak                        X  Y  X  Y  X  Y
index name 1 index name 1                  
Apples       a             2  9  4  7  0  3
Oranges      b             9  0  6  0  9  4
Puppies      c             2  4  6  1  4  4
Ducks        d             6  6  7  1  2  8

df2 = df.rename_axis(index=('foo','bar'), columns=('baz','bak'))
print (df2)
baz          A     B     C   
bak          X  Y  X  Y  X  Y
foo     bar                  
Apples  a    2  9  4  7  0  3
Oranges b    9  0  6  0  9  4
Puppies c    2  4  6  1  4  4
Ducks   d    6  6  7  1  2  8

인덱스 및 열 이름을 제거하면 다음과 같이 설정됩니다 None.

df2 = df.rename_axis(index=(None,None), columns=(None,None))
print (df2)

           A     B     C   
           X  Y  X  Y  X  Y
Apples  a  2  0  2  5  2  0
Oranges b  1  7  5  5  4  8
Puppies c  2  4  6  3  6  5
Ducks   d  9  6  3  9  7  0

그리고 @Jeff 솔루션 :

df.index.names = ['foo','bar']
df.columns.names = ['baz','bak']
print (df)

baz          A     B     C   
bak          X  Y  X  Y  X  Y
foo     bar                  
Apples  a    3  4  7  3  3  3
Oranges b    1  2  5  8  1  0
Puppies c    9  6  3  9  6  3
Ducks   d    3  2  1  0  1  0

7
나는 이것이 판다의 현재 버전에 대해 허용되는 대답이어야한다고 믿는다
Thomas Fauskanger

2
필이 다른 사람에게 제안한 것처럼 pandas.pydata.org/pandas-docs/stable/generated/…를df.index.rename('foo', inplace=True) 참조하십시오 .
Thomas Fauskanger

데이터 프레임으로 사용할 사전을 가져 왔으므로 인덱스 열은 1-10으로 행 번호가 지정된 자동으로 없음으로 설정되었습니다. 그러나 "이름"열을 색인으로 지정하고 싶습니다. 그리고 가능하다면 플로팅 중에 이것을하십시오. 이 작업을 수행 할 수 있습니까? 그리고 플롯 할 때 즉시 작업을 수행 할 수 있습니까?
TokyoToo

28

df.index.name 트릭을해야합니다.

파이썬에는 dir객체 속성을 쿼리 할 수 있는 기능이 있습니다. dir(df.index)여기에 도움이되었습니다.


17

df.index.rename('foo', inplace=True)색인 이름을 설정하는 데 사용하십시오 .

이 API는 팬더 0.13 부터 사용할 수 있습니다 .


1
와우 ... 우아한 해결책!
alfonso 2016 년

13

새 행을 만들지 않고 단순히 빈 셀에 넣으려면 다음을 사용하십시오.

df.columns.name = 'foo'

그렇지 않으면 다음을 사용하십시오.

df.index.name = 'foo'

1
그것이 열 이름의 이름이라는 것을 알았습니다. df.index.name을 설정하면 새로운 차원을 얻게됩니다. 감사합니다!
Charles


1

다중 인덱스에 대한 솔루션은 jezrael의 사이클 로프 답변 안에 있지만 새로운 답변을 게시하는 데 시간이 걸렸습니다.

df.index.names 다중 인덱스의 이름을 고정 목록으로 제공합니다.


1

인덱스 열 이름을 얻으려면 df.index.names최신 버전의 팬더로 단일 인덱스 또는 다중 인덱스 모두에서 작동합니다.

인덱스 이름 + 열 이름 목록을 얻는 가장 좋은 방법을 찾으려고 노력 하면서이 사실을 발견 한 사람은이 답변이 유용하다는 것을 알았습니다.

names = list(filter(None, df.index.names + df.columns.values.tolist()))

인덱스, 단일 열 인덱스 또는 다중 인덱스가없는 경우 작동합니다. 이러한 간단한 조작에 불필요한 성능 저하가있는 reset_index () 호출을 피합니다. 나는 이것을 위해 내장 된 방법이 없다는 것에 놀랐다 (내가 만났다). 데이터 프레임 인덱스가 기본 / 고유 키에 매핑되는 데이터베이스에서 데이터를 셔틀하고 있기 때문에 더 자주 필요하다고 생각하지만 실제로는 또 다른 열입니다.


1

색인 이름 설정은 작성시에도 수행 할 수 있습니다.

pd.DataFrame(data={'age': [10,20,30], 'height': [100, 170, 175]}, index=pd.Series(['a', 'b', 'c'], name='Tag'))
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.