Wie erhalte/setze ich den Titel oder Namen einer Pandas-Indexspalte?

Lesezeit: 7 Minuten

Benutzeravatar von Radical Edward
Radikaler Eduard

Wie erhalte ich den Namen der Indexspalte in Pythons Pandas? Hier ist ein Beispieldatenrahmen:

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

Was ich versuche zu tun, ist den Indextitel des Datenrahmens abzurufen/einzustellen. Folgendes habe ich versucht:

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 das geht?

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

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

  • Ab jetzt (0.16) funktioniert es nicht. Oder besser gesagt – es funktioniert, aber sobald DataFrame geändert wird, löscht es den Indexnamen.

    – Piotr Migdal

    11. April 2015 um 20:37 Uhr

  • Es sollte möglich sein, den Indexnamen zum Zeitpunkt der DataFrame-Erstellung anzugeben. z.B pd.DataFrame(values,index={"INDEX_NAME":index_values}). Ich verstehe nicht, warum dies nicht erlaubt oder implementiert ist?

    – denfromufa

    1. April 2016 um 14:42 Uhr


  • Sie können direkt mit einem Index konstruieren, um einen Namen hinzuzufügen

    – Jeff

    1. April 2016 um 16:15 Uhr

  • @ Jeff, sieht aus wie Ihre Beobachtung, dass es der richtige Ansatz ist, zuerst den Index zu erstellen (und ihn für den Index und die Spalten des Datenrahmens zu verwenden), obwohl ich dem zustimme @denfromufa dass es ein Diktat als Parameter nehmen sollte, um es aus pandas.DataFrame zu konstruieren

    – Diego Aguado

    7. März 2017 um 18:27 Uhr

  • Wenn es sich um einen Multiindex handelt, verwenden Sie df.index.names anstatt df.index.name.

    – Jascha

    2. September 2018 um 0:03 Uhr

Benutzeravatar von jezrael
Israel

Sie können verwenden rename_axiszum Entfernen auf gesetzt 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

Die neue Funktionalität funktioniert gut in Methodenketten.

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

Sie können Spaltennamen auch mit Parameter umbenennen 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

Ab Fassung pandas 0.24.0+ ist ein möglicher Verwendungsparameter index Und columns:

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

Das Entfernen von Index- und Spaltennamen bedeutet, dass Sie es auf setzen 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

Wenn MultiIndex nur im Index:

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

Das Entfernen von Index- und Spaltennamen bedeutet, dass Sie es auf setzen 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

Für MultiIndex in Index und Spalten ist die Arbeit mit notwendig .names stattdessen .name und durch Liste oder Tupel gesetzt:

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

Plural ist notwendig für Prüf-/Einstellwerte:

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

Das Entfernen von Index- und Spaltennamen bedeutet, dass Sie es auf setzen 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

Und @ Jeff Lösung:

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

  • Auch erwähnenswert, wie Phil in einem anderen vorschlägt df.index.rename('foo', inplace=True) sehen pandas.pydata.org/pandas-docs/stable/generated/…

    – Thomas Fauskanger

    26. Juni 2018 um 14:20 Uhr


  • Ich habe ein Wörterbuch importiert, das als Datenrahmen verwendet werden soll, daher wurde die Indexspalte automatisch auf None gesetzt, wobei die Zeilen von 1 bis 10 nummeriert wurden. Aber ich möchte die Spalte “Namen” als Index zuweisen. Und wenn möglich, tun Sie dies während des Plottens. Ist es möglich, dies zu tun, und ist es möglich, dies spontan zu tun, während wir planen?

    – TokyoToo

    24. Mai 2020 um 8:11 Uhr


  • jezrael gab die richtige Antwort auf die ursprüngliche Frage, bei der es um die Spaltenindexnamen ging, nicht um die Zeilenindexnamen. Plus eine vollständige Erklärung. Grundsätzlich muss Radical Edward den Namen der Indexspalte haben und nur df.index.names verwenden

    – Rodolfo Bugarin

    12. Februar 2021 um 12:17 Uhr

df.index.name sollte den Trick machen.

Python hat eine dir Funktion, mit der Sie Objektattribute abfragen können. dir(df.index) war hier hilfreich.

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

Scheint, dass diese API seit verfügbar ist Pandas 0.13.

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

df.columns.name="foo"

Ansonsten verwenden:

df.index.name="foo"

  • Ich habe gerade herausgefunden, dass es ein Name für Spaltennamen ist. Kein Wunder, dass Ihnen das Setzen von df.index.name ein neues Level verschafft. Danke schön!

    – KW

    15. Juni 2017 um 15:52 Uhr

Benutzeravatar von dusio
Dusio

Das Festlegen des Indexnamens kann auch bei der Erstellung erfolgen:

pd.DataFrame(data={'age': [10,20,30], 'height': [100, 170, 175]}, index=pd.Series(['a', 'b', 'c'], name="Tag"))

  • Ich habe gerade herausgefunden, dass es ein Name für Spaltennamen ist. Kein Wunder, dass Ihnen das Setzen von df.index.name ein neues Level verschafft. Danke schön!

    – KW

    15. Juni 2017 um 15:52 Uhr

Benutzeravatar von pnv
pnv

df.columns.values geben Sie uns auch die Spaltennamen

1448870cookie-checkWie erhalte/setze ich den Titel oder Namen einer Pandas-Indexspalte?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy