Python 索引列标题或名称
如何在python中获取索引列名?下面是一个数据帧示例:Python 索引列标题或名称,python,pandas,dataframe,columnname,Python,Pandas,Dataframe,Columnname,如何在python中获取索引列名?下面是一个数据帧示例: Column 1 Index Title Apples 1 Oranges 2 Puppies 3 Ducks 4 我试图做的是获取/设置数据帧索引标题。以下是我尝试过的: import pandas as pd data = {'Column 1' : [1., 2., 3.,
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
有人知道怎么做吗 您可以通过其
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
df.index.name
应该可以做到这一点
Python有一个
dir
函数,让您可以查询对象属性dir(df.index)
在这里很有帮助。如果不想创建新行,只需将其放入空单元格,则使用:
df.columns.name = 'foo'
否则,请使用:
df.index.name = 'foo'
df.columns.values
还为我们提供了列名您可以用来删除设置为无的列名:
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(index=None, columns=None)
print (df)
Column 1
Apples 1.0
Oranges 2.0
Puppies 3.0
Ducks 4.0
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
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
新功能在方法链中运行良好
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
从版本0.24.0+
可以使用参数索引和列:
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
:
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(index=None, columns=None)
print (df)
Column 1
Apples 1.0
Oranges 2.0
Puppies 3.0
Ducks 4.0
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
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
如果多索引
仅在索引中:
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
删除索引和列名意味着将其设置为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(index=None, columns=None)
print (df)
Column 1
Apples 1.0
Oranges 2.0
Puppies 3.0
Ducks 4.0
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
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
对于索引和列中的多索引
,必须使用。名称
,而不是。名称
,并按列表或元组设置:
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']
删除索引和列名意味着将其设置为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(index=None, columns=None)
print (df)
Column 1
Apples 1.0
Oranges 2.0
Puppies 3.0
Ducks 4.0
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
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
使用df.index.rename('foo',inplace=True)
设置索引名称
似乎此api从开始就可用。多索引解决方案在jezrael的cyclopedic答案中,但我花了一段时间才找到它,因此我发布了一个新答案:
df.index.names
提供多索引的名称(作为冻结列表)。仅获取索引列名df.index.names
将适用于最新版本的pandas的单个索引或多索引
如果有人在试图找到获取索引名+列名列表的最佳方法时发现了这一点,我会发现这个答案很有用:
names = list(filter(None, df.index.names + df.columns.values.tolist()))
这适用于无索引、单列索引或多索引。它避免了调用reset_index(),对于这样一个简单的操作,它会对性能造成不必要的影响。我很惊讶没有一个内置的方法(我遇到过)。我想我更经常需要这个,因为我正在从数据库中穿梭数据,其中dataframe索引映射到主键/唯一键,但实际上对我来说只是另一列。设置索引名称也可以在创建时完成:
pd.DataFrame(data={'age': [10,20,30], 'height': [100, 170, 175]}, index=pd.Series(['a', 'b', 'c'], name='Tag'))
到目前为止(0.16),它不起作用。或者更确切地说,它确实可以工作,但一旦数据帧得到修改,它就会删除索引名。应该可以在数据帧创建时指定索引名。e、 g.pd.DataFrame(值,索引={“索引名称”:索引值})
。我不明白为什么不允许或不实现这一点?您可以直接使用索引进行构造以添加name@Jeff,看起来像是您观察到的先构造索引(并将其用于数据帧的索引和列)是正确的方法,尽管我同意@denfromufa
它应该以dict作为参数从pandas.dataframe构建如果它是一个多索引,请使用df.index.names
而不是df.index.name
。刚刚发现它是列名称的名称。难怪设置df.index.name会给您带来一个新的级别。非常感谢。我相信这应该是pandasAlso当前版本的公认答案,值得注意,正如phil在另一个df.index.rename('foo',inplace=True)
中所建议的那样,我已经导入了一个字典用作数据帧,因此索引列被自动设置为无,行数为1-10。但是我想指定“names”列作为索引。如果可能的话,在绘图过程中进行此操作。有没有可能做到这一点?有没有可能在我们绘图时即时做到这一点?耶兹雷尔对最初的问题给出了正确的答案,这是关于列索引名,而不是行索引名。再加上一个完整的解释。基本上,要获得索引列名,只需使用df.index.namesWow。。。一个优雅的解决方案!虽然不是那么(功能)纯粹。。。