更改多个列名称

时间:2018-02-11 18:22:07

标签: python pandas

我们说我有一个包含这些列名的数据框:

['a','b','c','d','e','f','g'] 

我想更改' c'到了' f' (实际上将字符串添加到列的名称),因此整个数据框列名称将如下所示:

['a','b','var_c_equal','var_d_equal','var_e_equal','var_f_equal','g']

好吧,首先我创建了一个用我想要的字符串更改列名的函数:

df.rename(columns=lambda x: 'or_'+x+'_no', inplace=True)

但现在我真的想了解如何实现这样的事情:

df.loc[:,'c':'f'].rename(columns=lambda x: 'var_'+x+'_equal', inplace=True)

2 个答案:

答案 0 :(得分:3)

您可以使用list comprehension,例如:

代码:

new_columns = ['var_{}_equal'.format(c) if c in 'cdef' else c for c in columns]

测试代码:

import pandas as pd


df = pd.DataFrame({'a':(1,2), 'b':(1,2), 'c':(1,2), 'd':(1,2)})
print(df)
df.columns = ['var_{}_equal'.format(c) if c in 'cdef' else c
               for c in df.columns]
print(df)

结果:

   a  b  c  d
0  1  1  1  1
1  2  2  2  2

   a  b  var_c_equal  var_d_equal
0  1  1            1            1
1  2  2            2            2

答案 1 :(得分:2)

一种方法是使用字典而不是匿名函数。以下两种变体都假定您需要重命名的列是连续的。

按位置连续列

d = {k: 'var_'+k+'_equal' for k in df.columns[2:6]}
df = df.rename(columns=d)

按名称列出的连续列

如果您需要计算数字指数:

cols = df.columns.get_loc
d = {k: 'var_'+k+'_equal' for k in df.columns[cols('c'):cols('f')+1]}
df = df.rename(columns=d)

明确标识的专栏

如果要明确提供列:

d = {k: 'var_'+k+'_equal' for k in 'cdef'}
df = df.rename(columns=d)