2015-11-20 49 views
3
如何重命名列标题

我有以下的数据帧使用索引编号在熊猫

import pandas as pd 
df = pd.DataFrame({ 'gene':["foo", 
          "lal", 
          "qux", 
          "woz"], 'cell1':[5,9,1,7], 'cell2':[12,90,13,87]}) 
df = df[["gene","cell1","cell2"]] 
df 

,看起来像这样:

gene cell1 cell2 
0 foo  5  12 
1 lal  9  90 
2 qux  1  13 
3 woz  7  87 

我想要做的是改变列名第一和第三列。 从而造成:

X cell1 Y 
    foo  5 12 
    lal  9 90 
    qux  1 13 
    woz  7 87 

我如何能做到用02索引编号。

我能做到这一点

df.columns = ["X","cell1","Y"] 

但它不使用列索引。

回答

2
df.columns._data[0] = 'X' 

df.columns._data[2] = 'Y' 

>>> df 
    X cell1 Y 
0 foo  5 12 
1 lal  9 90 
2 qux  1 13 
3 woz  7 87 

一般注意事项:有疑问时,看一个类的__dict__变量:

>>> df.columns.__dict__ 
{'freq': None, '_cache': {'dtype': dtype('O'), 'is_all_dates': False, 'is_unique': True, 'inferred_t 
ype': 'string', '_engine': <pandas.index.ObjectEngine object at 0x000000000882DC48>}, '_data': array 
(['gene', 'cell1', 'cell2'], dtype=object), '_id': <object object at 0x00000000028F4720>, 'name': No 
ne} 
+2

带有下划线的名字通常表示“嗨,假装我不在这里!”。它不是公共API的一部分,所以除非它被记录为可以使用,否则它可能会在未来消失并根据它破坏代码。访问这样的“私有”属性有时会很有用,但是有一种方法可以通过公共API来实现,所以我认为这不是一个有保证的情况。 – jme

+0

总是不建议编辑私有属性 –

4

请从列的列表,修改列表,然后重新分配列表的列属性:

>>> cols = list(df.columns) 
>>> cols[0] = 'X' 
>>> cols[2] = 'Y' 
>>> df.columns = cols 

可替换地,一个班轮:

>>> df.rename(columns={'cell1': 'X', 'gene': 'Y'}, inplace=True)