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
时,第一部分不再是视图,而是副本。很像。