Pandas索引列标题或名称

时间:2013-08-02 17:30:53

标签: python pandas dataframe columnname

如何在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

任何人都知道如何做到这一点?

9 个答案:

答案 0 :(得分:249)

您可以通过其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

答案 1 :(得分:52)

您可以使用rename_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') 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+

从版本index可以使用参数columnsdf = 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

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

和@Jeff解决方案:

var rp = require('request-promise');
var parseString = require('xml2js').parseString;

module.exports = function getSteamID64(URL) {
  return rp(URL)
    .then(function (xml) {
      return new Promise(function(resolve, reject) {
        parseString(xml, {
          explicitArray : false,
          ignoreAttrs : true,
          trim : true
        }, function(err, result){
          if (err) {
            reject(err);
          } else {
            resolve(result);
          }
        });
      });
});
}

答案 2 :(得分:26)

df.index.name应该可以解决问题。

Python有一个dir函数,让您查询对象属性。 dir(df.index)在这里很有帮助。

答案 3 :(得分:14)

使用df.index.rename('foo', inplace=True)设置索引名称。

似乎这个api自pandas 0.13以来可用。

答案 4 :(得分:11)

如果您不想创建新行但只是将其放在空单元格中,请使用:

df.columns.name = 'foo'

否则使用:

df.index.name = 'foo'

答案 5 :(得分:7)

df.columns.values也为我们提供了列名

答案 6 :(得分:5)

设置索引名称也可以在创建时完成:

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

答案 7 :(得分:1)

要获取索引列名称,df.index.names将适用于最新版本的熊猫的单个索引或MultiIndex。

作为在尝试找到获取索引名+列名列表的最佳方法时发现此问题的人,我会发现此答案很有用:

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

这不适用于索引,单列索引或多索引。它避免了调用reset_index(),因为这种简单的操作会对性能造成不必要的影响。我很惊讶没有一个内置的方法(我遇到过)。我猜想我经常遇到这种情况,因为我正在从数据库中穿梭,其中数据帧索引映射到主键/唯一键,但实际上只是我的另一列。

答案 8 :(得分:0)

多索引解决方案位于jezrael的百科全书答案中,但是我花了一段时间才找到它,所以我发布了一个新答案:

df.index.names给出了多索引的名称(作为冻结列表)。

相关问题