我正在尝试了解在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
答案 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')