使用Pandas中的列表替换列名称

时间:2017-06-01 00:28:57

标签: python pandas

我正在尝试了解在pandas中使用df.rename时的错误。具体来说,使用带有元组的重命名函数执行时没有错误,但是没有对列名进行任何更改。

f_GreaterArea = pd.DataFrame(np.random.randn(5, 3), 
                index=['a', 'c', 'e', 'f', 'h'],
                columns=['one', 'two', 'three'])

print(f_GreaterArea)

    one       two     three
a  0.278969 -0.676388 -2.464444
c -0.992077 -0.435534  2.267315
e  2.094669 -1.401885  1.243658
f  0.886835  0.195726 -0.132382
h -0.920486 -0.298380  2.227378

old_colnames = ('one', 'two', 'three')
new_colnames = ('pig', 'cups', 'seven')


f_GreaterArea.rename(columns={old_colnames:new_colnames}, inplace=True)

print(f_GreaterArea)

    one       two     three
a  0.278969 -0.676388 -2.464444
c -0.992077 -0.435534  2.267315
e  2.094669 -1.401885  1.243658
f  0.886835  0.195726 -0.132382
h -0.920486 -0.298380  2.227378

2 个答案:

答案 0 :(得分:8)

你想传递一个有三个条目的dict是正确的,你要重命名的每一列都有一个条目,但你传递的dict不是。它是一个条目的dict,一个元组作为键,一个作为值。

使用dict理解将元组转换为dict,如下所示:

{i:j for i,j in zip(old_colnames,new_colnames)}

因此,在您的代码的上下文中,那是:

col_rename_dict = {i:j for i,j in zip(old_colnames,new_colnames)}
f_GreaterArea.rename(columns=col_rename_dict, inplace=True)

或者只是:

f_GreaterArea.rename(
    columns={i:j for i,j in zip(old_colnames,new_colnames)}, inplace=True
)

这里有a nice little write-up一般的理解,包括dict理解。它还包括zip

的使用

答案 1 :(得分:2)

columns参数应该是这样的:

{'one': 'pig', 'three': 'seven', 'two': 'cups'}

使用此代码获取它:

dict(zip(old_colnames, new_colnames))

如果要更改列的名称,请使用此代码更容易:

f_GreaterArea.columns = ('pig', 'cups', 'seven')