Python 如何在不引用旧列名和不创建新数据框的情况下更改列名?

Python 如何在不引用旧列名和不创建新数据框的情况下更改列名?,python,pandas,Python,Pandas,我知道我可以通过以下操作更改列名: df = df.rename(columns = {old_name: new_name}) 但是我必须重新命名很多,而且旧名字很长,所以我只想传入一个新名字的列表。如果我将新列设置为自己的数据帧,则效果很好: ranks = sw[sw.columns[9:15]] ranks.columns = ['ranking_1', 'ranking_2', 'ranking_3', 'ranking_4', 'ranking_5', 'ranking_6']

我知道我可以通过以下操作更改列名:

df = df.rename(columns = {old_name: new_name})
但是我必须重新命名很多,而且旧名字很长,所以我只想传入一个新名字的列表。如果我将新列设置为自己的数据帧,则效果很好:

ranks = sw[sw.columns[9:15]]
ranks.columns = ['ranking_1', 'ranking_2', 'ranking_3', 'ranking_4', 'ranking_5', 'ranking_6']
但是,如果我尝试只使用列的切片,而不将其更改为自己的df,则什么也不会发生:

sw[sw.columns[9:15]].columns = ['ranking_1', 'ranking_2', 'ranking_3', 'ranking_4', 'ranking_5', 'ranking_6']
如何重命名列并将其保留在原始数据框中?

此:

sw[sw.columns[9:15]] = ['ranking_1', 'ranking_2', 'ranking_3', 'ranking_4', 'ranking_5', 'ranking_6']
更改
软件的数据,而不是列名。手动更改列名的方法可以是:

# new column names
new_cols = ['ranking_1', 'ranking_2', 'ranking_3', 'ranking_4', 'ranking_5', 'ranking_6']

# slice the columns name, replace the part you want and concatenate
sw.columns = list(sw.columns[:9]) + new_cols + list(sw.columns[15:])
或者,您也可以构建字典并使用
重命名

rename_dict = {a:b for a,b in zip(new_cols, sw.columns[9:15])}
sw.rename(columns=rename_dict)

你是说像这样的事吗

import pandas as pd

df = pd.DataFrame(columns=['A','B','C','D','E',
                           'F','G','H','I','J',
                           'K','L','M','N','O'])
col = list(df.columns)                # get them all
rankcol = ['ranking_1', 'ranking_2', 'ranking_3', 
           'ranking_4', 'ranking_5', 'ranking_6']

df.columns = col[:9]+rankcol

我在sw[sw.columns[9:15]]的末尾添加了.columns(我在上面进行了编辑)。现在我指的是列,而不是
sw
数据。那为什么不起作用呢?我猜它不起作用,因为当你分配
sw[sw.columns[9:15]]].columns
时,第一部分不再是视图,而是副本。很像。