我有一个要更改其最后30个标头的数据框。我有一个需要更改的值的列表,但我想保留数据帧中原始的前两个标头。例如,我的数据框类似于
Customer ID Email Topwater ... Plastics Finesse
12345 me@me.com 1 ... 1 0
...
我的名单是:
[Bait #1, Bait #2, Bait #3, ... , Bait #10, Bait #11]
我正在寻求实现:
Customer ID Email Bait#1 ... Bait #10 Bait #11
12345 me@me.com 1 ... 1 0
...
我尝试了此操作(其中df_binary是要更改标题的数据帧,但似乎没有任何作用,只是返回了初始数据帧:
header_list = ['Customer ID','Email']
header_list.extend(list_of_baits)
df_binary.iloc[:,2:37].columns = my_list2
答案 0 :(得分:2)
我认为需要替换最后3个值-将所有列名(不包含最后一个)转换为list
并添加新项目:
print (df)
Customer ID Email Topwater ... Plastics Finesse
0 12345 me@me.com 1 ... 1 0 4
list_of_baits = ['Bait #1','Bait #2','Bait #3']
#for last 30 change -3 to -30
df.columns = df.columns[:-3].tolist() + list_of_baits
print (df)
Customer ID Email Topwater Bait #1 Bait #2 Bait #3
0 12345 me@me.com 1 ... 1 0 4
答案 1 :(得分:2)
您可以检索数据框列下方的数组,并更新最后的 n 项:
list_of_baits = ['Bait #1', 'Bait #2', 'Bait #3']
df = pd.DataFrame(columns=['Customer ID', 'Email', 1, 2, 3])
arr = df.columns.values
arr[-3:] = list_of_baits # change -3 to -30
df.columns = arr
print(df.columns)
Index(['Customer ID', 'Email', 'Bait #1', 'Bait #2', 'Bait #3'], dtype='object')
请注意,您不应尝试直接更新df.columns
,因为Pandas索引对象不支持可变操作。您也不应尝试直接更新df.columns.values
,因为这可能会带来意想不到的副作用。
答案 2 :(得分:2)
来自jpp rename
df= df.rename(columns=dict(zip(df.columns[-3:],list_of_baits)))
#df.rename(columns=dict(zip(df.columns.values[-3:],list_of_baits)))
Out[238]:
Empty DataFrame
Columns: [Customer ID, Email, Bait #1, Bait #2, Bait #3]
Index: []