我一直在寻找一种优雅的方式来更改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'
感激地收到任何提示。
答案 0 :(得分:302)
确实存在一个班轮:
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)
答案 1 :(得分:98)
由于inplace
参数可用,您无需复制原始数据框并将其分配给自身,但请执行以下操作:
df.rename(columns={'two':'new_name'}, inplace=True)
答案 2 :(得分:29)
怎么样?
df.columns.values[2] = "new_name"
答案 3 :(得分:6)
重命名方法获得了一个轴参数,以匹配大部分pandas API。
所以,除此之外:
df.rename(columns = {'two':'new_name'})
你可以这样做:
df.rename({'two':'new_name'}, axis=1)
或
df.rename({'two':'new_name'}, axis='columns')
答案 4 :(得分:4)
如果您知道#列是哪一列(第一个/第二个/第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..)
答案 5 :(得分:2)
对于这里重命名列是一个简单的列,它既适用于Default(0,1,2,etc;)
列也适用于现有列,但对于较大的数据集(具有多列)没有多大用处。
对于更大的数据集,我们可以对我们需要的列进行切片并应用以下代码:
df.columns = ['new_name','new_name1','old_name']
答案 6 :(得分:2)
以下简短代码可以提供帮助:
df3 = df3.rename(columns={c: c.replace(' ', '') for c in df3.columns})
从列中删除空格。
答案 7 :(得分:2)
pandas版本0.23.4
df.rename(index=str,columns={'old_name':'new_name'},inplace=True)
作记录:
省略index = str将给错误替换提供一个意外的参数 “列”
答案 8 :(得分:0)
另一种选择是只需复制并删除该列:
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
答案 9 :(得分:0)
size = 10
df.rename(columns={df.columns[i]: someList[i] for i in range(size)}, inplace = True)