更改pandas DataFrame中的特定列名

我正在寻找一种优雅的方法来更改DataFrame中指定的列名。

播放数据…

import pandas as pd
d = {
'one': [1, 2, 3, 4, 5],
'two': [9, 8, 7, 6, 5],
'three': ['a', 'b', 'c', 'd', 'e']
}
df = pd.DataFrame(d)

到目前为止,我找到的最优雅的解决方案……

names = df.columns.tolist()
names[names.index('two')] = 'new_name'
df.columns = names

我本想说一句简单的俏皮话…这次尝试失败了……

df.columns[df.columns.tolist().index('one')] = 'another_name'

感激地接受任何提示。

386131 次浏览

一行代码确实存在:

In [27]: df=df.rename(columns = {'two':'new_name'})


In [28]: df
Out[28]:
one three  new_name
0    1     a         9
1    2     b         8
2    3     c         7
3    4     d         6
4    5     e         5

下面是rename方法的文档字符串。

Definition: df.rename(self, index=None, columns=None, copy=True, inplace=False)
Docstring:
Alter index and / or columns using input function or
functions. Function / dict values must be unique (1-to-1). Labels not
contained in a dict / Series will be left as-is.


Parameters
----------
index : dict-like or function, optional
Transformation to apply to index values
columns : dict-like or function, optional
Transformation to apply to column values
copy : boolean, default True
Also copy underlying data
inplace : boolean, default False
Whether to return a new DataFrame. If True then value of copy is
ignored.


See also
--------
Series.rename


Returns
-------
renamed : DataFrame (new object)

因为inplace参数是可用的,所以你不需要复制并将原始数据帧赋值给它自己,而是按照以下步骤执行:

df.rename(columns={'two':'new_name'}, inplace=True)

关于什么?

df.columns[2] = "new_name"

熊猫0.21现在有一个轴参数

rename方法获得了一个轴参数,以匹配pandas API的大多数其他部分。

所以,除此之外:

df.rename(columns = {'two':'new_name'})

你可以:

df.rename({'two':'new_name'}, axis=1)

df.rename({'two':'new_name'}, axis='columns')

对于重命名列,这里是一个简单的方法,它对Default(0,1,2,etc;)和现有列都有效,但对更大的数据集(有很多列)用处不大。

对于一个更大的数据集,我们可以切片我们需要的列,并应用下面的代码:

df.columns = ['new_name','new_name1','old_name']

以下简短代码可以提供帮助:

df3 = df3.rename(columns={c: c.replace(' ', '') for c in df3.columns})

从列中删除空格。

如果你知道#它是哪一列(第一/第二/第n列),那么这个关于类似问题的解决方案就可以工作,不管它是命名的还是未命名的,并且在一行:https://stackoverflow.com/a/26336314/4355695

df.rename(columns = {list(df)[1]:'new_name'}, inplace=True)
# 1 is for second column (0,1,2..)

另一个选项是简单地及复印件;下降列:

df = pd.DataFrame(d)
df['new_name'] = df['two']
df = df.drop('two', axis=1)
df.head()

之后你会得到结果:

    one three   new_name
0   1   a       9
1   2   b       8
2   3   c       7
3   4   d       6
4   5   e       5

熊猫0.23.4版

df.rename(index=str,columns={'old_name':'new_name'},inplace=True)

郑重声明:

省略索引=str将给出错误替换有一个意外的参数 “列”< / p >

size = 10
df.rename(columns={df.columns[i]: someList[i] for i in range(size)}, inplace = True)