Hoe krijg ik de naam van de indexkolom in Python Panda’s? Hier is een voorbeeld dataframe:
Column 1
Index Title
Apples 1
Oranges 2
Puppies 3
Ducks 4
Wat ik probeer te doen is de Dataframe-indextitel krijgen / instellen. Dit is wat ik heb geprobeerd:
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
Iedereen weet hoe dit te doen?
Antwoord 1, Autoriteit 100%
U kunt gewoon de index krijgen / instellen via de name
EIGENSWONING
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
Antwoord 2, Autoriteit 20%
U kunt rename_axis
, voor het verwijderen van ingesteld op 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
De nieuwe functionaliteit werkt goed in methodeketens.
df = df.rename_axis('foo')
print (df)
Column 1
foo
Apples 1.0
Oranges 2.0
Puppies 3.0
Ducks 4.0
Je kunt de kolomnamen ook hernoemen met parameter 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
Vanaf versie pandas 0.24.0+
is het mogelijk parameter index
en columns
te gebruiken:
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
Het verwijderen van index- en kolomnamen betekent instellen op 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
Indien MultiIndex
alleen in 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
Index- en kolommen-namen verwijderen betekent instellen op 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
Voor MultiIndex
IN INDEX EN KOLOMMEN WERKT WERKEN MET .names
in plaats daarvan .names
EN SET PER LIJST OF TUPLES:
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 is nodig voor cheque / ingestelde waarden:
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
Het verwijderen van index- en kolomnamen betekent instellen op 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
En @Jeff-oplossing:
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
Antwoord 3, autoriteit 6%
df.index.name
zou het lukken.
Python heeft een functie dir
waarmee u objectkenmerken kunt opvragen. dir(df.index)
was hier nuttig.
Antwoord 4, autoriteit 4%
Gebruik df.index.rename('foo', inplace=True)
om de indexnaam in te stellen.
Het lijkt erop dat deze api beschikbaar is sinds panda’s 0.13.
Antwoord 5, autoriteit 3%
Als u geen nieuwe rij wilt maken, maar deze gewoon in de lege cel wilt plaatsen, gebruik dan:
df.columns.name = 'foo'
Anders gebruik:
df.index.name = 'foo'
Antwoord 6, autoriteit 2%
Het instellen van de indexnaam kan ook worden bereikt bij het maken:
pd.DataFrame(data={'age': [10,20,30], 'height': [100, 170, 175]}, index=pd.Series(['a', 'b', 'c'], name='Tag'))
Antwoord 7
df.columns.values
geeft ons ook de kolomnamen
Antwoord 8
De oplossing voor multi-indexen zit in het cyclopedische antwoord van Jezrael, maar het kostte me een tijdje om het te vinden, dus plaats ik een nieuw antwoord:
df.index.names
geeft de namen van een multi-index (als een Frozenlist).
Antwoord 9
Om alleen de indexkolomnamen te krijgen, werkt df.index.names
voor zowel een enkele Index als MultiIndex vanaf de meest recente versie van panda’s.
Als iemand die dit vond toen ik probeerde de beste manier te vinden om een lijst met indexnamen + kolomnamen te krijgen, zou ik dit antwoord nuttig hebben gevonden:
names = list(filter(None, df.index.names + df.columns.values.tolist()))
Dit werkt voor geen index, index met één kolom of MultiIndex. Het vermijdt het aanroepen van reset_index() die een onnodige prestatiehit heeft voor zo’n eenvoudige operatie. Het verbaast me dat hier geen ingebouwde methode voor is (die ik ben tegengekomen). Ik denk dat ik dit vaker nodig heb omdat ik gegevens uit databases pendel waar de dataframe-index is toegewezen aan een primaire/unieke sleutel, maar het is eigenlijk gewoon een andere kolom voor mij.