412 Stimmen

Wie kann man einen pandas-Index-Spalten-Titel oder Namen erhalten/setzen?

Wie bekomme ich den Spaltennamen des Index in Pandas in Python? Hier ist ein Beispiel-DataFrame:

             Column 1
Index Title          
Apples              1
Oranges             2
Puppies             3
Ducks               4  

Was ich versuche, ist den Titel des Index im DataFrame zu erhalten/setzen. Hier ist was ich versucht habe:

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"]

Weiß jemand, wie man das macht?

594voto

Jeff Punkte 123194

Sie können den Index einfach über seine name Eigenschaft abrufen/setzen

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

127voto

jezrael Punkte 716156

Sie können rename_axis verwenden, um das Setzen auf None zu entfernen:

d = {'Index-Titel': ['Äpfel', 'Orangen', 'Welpen', 'Enten'],'Spalte 1': [1.0, 2.0, 3.0, 4.0]}
df = pd.DataFrame(d).set_index('Index-Titel')
print (df)
             Spalte 1
Index-Titel          
Äpfel             1.0
Orangen           2.0
Welpen            3.0
Enten             4.0

print (df.index.name)
Index-Titel

print (df.columns.name)
None

Die neue Funktionalität funktioniert gut in Methodenketten.

df = df.rename_axis('foo')
print (df)
         Spalte 1
foo              
Äpfel        1.0
Orangen       2.0
Welpen        3.0
Enten         4.0

Sie können auch Spaltennamen mit dem Parameter axis umbenennen:

d = {'Index-Titel': ['Äpfel', 'Orangen', 'Welpen', 'Enten'],'Spalte 1': [1.0, 2.0, 3.0, 4.0]}
df = pd.DataFrame(d).set_index('Index-Titel').rename_axis('Spaltenname', axis=1)
print (df)
Spaltenname     Spalte 1
Index-Titel          
Äpfel             1.0
Orangen           2.0
Welpen            3.0
Enten             4.0

print (df.index.name)
Index-Titel

print (df.columns.name)
Spaltenname

print df.rename_axis('foo').rename_axis("bar", axis="columns")
bar      Spalte 1
foo              
Äpfel        1.0
Orangen       2.0
Welpen       3.0
Enten         4.0

print df.rename_axis('foo').rename_axis("bar", axis=1)
bar      Spalte 1
foo              
Äpfel        1.0
Orangen       2.0
Welpen       3.0
Enten         4.0

Ab Version pandas 0.24.0+ ist es möglich, die Parameter index und columns zu verwenden:

df = df.rename_axis(index='foo', columns="bar")
print (df)
bar      Spalte 1
foo              
Äpfel        1.0
Orangen       2.0
Welpen       3.0
Enten         4.0

Das Entfernen von Index- und Spaltennamen bedeutet, sie auf None zu setzen:

df = df.rename_axis(index=None, columns=None)
print (df)
         Spalte 1
Äpfel        1.0
Orangen       2.0
Welpen       3.0
Enten         4.0

Wenn MultiIndex nur im Index vorhanden ist:

mux = pd.MultiIndex.from_arrays([['Äpfel', 'Orangen', 'Welpen', 'Enten'],
                                  list('abcd')], 
                                  names=['Indexname 1','Indexname 1'])

df = pd.DataFrame(np.random.randint(10, size=(4,6)), 
                  index=mux, 
                  columns=list('ABCDEF')).rename_axis('Spaltenname', axis=1)
print (df)
Spaltenname                   A  B  C  D  E  F
Indexname 1 Indexname 1                  
Äpfel       a             5  4  0  5  2  2
Orangen      b             5  8  2  5  9  9
Welpen      c             7  6  0  7  8  3
Enten        d             6  5  0  1  6  0

print (df.index.name)
None

print (df.columns.name)
Spaltenname

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

print (df.columns.names)
['Spaltenname']

df1 = df.rename_axis(('foo','bar'))
print (df1)
Spaltenname     A  B  C  D  E  F
foo     bar                  
Äpfel  a    5  4  0  5  2  2
Orangen  b    5  8  2  5  9  9
Welpen  c    7  6  0  7  8  3
Enten  d    6  5  0  1  6  0

df2 = df.rename_axis('baz', axis=1)
print (df2)
baz                        A  B  C  D  E  F
Indexname 1 Indexname 1                  
Äpfel       a             5  4  0  5  2  2
Orangen      b             5  8  2  5  9  9
Welpen      c             7  6  0  7  8  3
Enten        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                  
Äpfel  a    5  4  0  5  2  2
Orangen b    5  8  2  5  9  9
Welpen c    7  6  0  7  8  3
Enten   d    6  5  0  1  6  0

Das Entfernen von Index- und Spaltennamen bedeutet, sie auf None zu setzen:

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

           A  B  C  D  E  F
Äpfel  a  6  9  9  5  4  6
Orangen b  2  6  7  4  3  5
Welpen c  6  3  6  3  5  1
Enten   d

33voto

lazy1 Punkte 12416

df.index.name sollte funktionieren.

Python hat eine dir-Funktion, die es Ihnen ermöglicht, Objektattribute abzufragen. dir(df.index) war hier hilfreich.

22voto

Keith Punkte 4232

Wenn Sie keine neue Zeile erstellen, sondern sie einfach in die leere Zelle setzen möchten, verwenden Sie:

df.columns.name = 'foo'

Andernfalls verwenden Sie:

df.index.name = 'foo'

22voto

phil Punkte 2478

Verwenden Sie df.index.rename('foo', inplace=True), um den Indexnamen festzulegen.

Anscheinend ist diese API seit pandas 0.13 verfügbar.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X