更改pandas DataFrame中的特定列名称

Mar*_*aph 182 python pandas

我一直在寻找一种优雅的方式来改变一个指定的列名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)
Run Code Online (Sandbox Code Playgroud)

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

names = df.columns.tolist()
names[names.index('two')] = 'new_name'
df.columns = names
Run Code Online (Sandbox Code Playgroud)

我希望有一个简单的单行...这次尝试失败了......

df.columns[df.columns.tolist().index('one')] = 'another_name'
Run Code Online (Sandbox Code Playgroud)

感激地收到任何提示.

Nip*_*tra 332

确实存在一个班轮:

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
Run Code Online (Sandbox Code Playgroud)

以下是该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)


Jeo*_*Lee 104

由于inplace参数可用,因此您无需复制原始数据框并将其分配给自身,但请执行以下操作:

df.rename(columns={'two':'new_name'}, inplace=True)
Run Code Online (Sandbox Code Playgroud)


Jac*_*b H 33

关于什么?

df.columns.values[2] = "new_name"
Run Code Online (Sandbox Code Playgroud)

  • 实际上,如果以后在df ['new_name']等其他操作中使用列名,则不起作用 (10认同)
  • 这个答案对我来说非常有用,可以将特定列更改为新名称.第一列是索引0,第二列是索引1,依此类推.很好的解决方案..我相信这将有助于更多的人..因为其他解决方案要求您事先知道并复制原始列名....虽然这是快速和脏的方法..它有自己的用途. (2认同)
  • @MasterYogurt 您的评论不正确。如上所述更改变量后,可以执行 `df['new_name']`(和其他 Pandas 的东西)。您的评论在最初发布时可能是有效的。 (2认同)

Nik*_* VJ 11

如果你知道它是哪一列(第一/第二/第 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..)
Run Code Online (Sandbox Code Playgroud)


Ted*_*rou 6

Pandas 0.21现在有一个轴参数

重命名方法获得了一个轴参数,以匹配大多数其余的pandas API.

所以,除此之外:

df.rename(columns = {'two':'new_name'})
Run Code Online (Sandbox Code Playgroud)

你可以做:

df.rename({'two':'new_name'}, axis=1)
Run Code Online (Sandbox Code Playgroud)

要么

df.rename({'two':'new_name'}, axis='columns')
Run Code Online (Sandbox Code Playgroud)