12

I have a dataframe (df) that has 44 columns and I want to rename columns 2:44. I have a list (namesList) of length 42 that has the new column names. I then try to rename my columns by using the list:

df.columns[2:len(df.columns)] = namesList 

However I get the error:

TypeError: Index does not support mutable operations

Why do I get this error?

2 Answers 2

18

You need generate new columns names - first and second value from old one and another from list:

df.columns = df.columns[:2].tolist() + namesList 

Sample:

df = pd.DataFrame({'A':[1,2,3], 'B':[4,5,6], 'C':[7,8,9], 'D':[1,3,5], 'E':[5,3,6], 'F':[7,4,3]}) print (df) A B C D E F 0 1 4 7 1 5 7 1 2 5 8 3 3 4 2 3 6 9 5 6 3 namesList = ['K','L','M','N'] df.columns = df.columns[:2].tolist() + namesList print (df) A B K L M N 0 1 4 7 1 5 7 1 2 5 8 3 3 4 2 3 6 9 5 6 3 
Sign up to request clarification or add additional context in comments.

2 Comments

should we expect "Index does not support mutable operations" when trying to do this?
@Amir - do you assign new list of columns names to columns? If yes, then not.
1

I have come across renaming the first N column and last N columns. Replace the value for N according to your need.

1) To Rename Last N Columns (ignoring the first 2)

cols_to_update = df.columns[:N].tolist() + ['col2_new','col3_new'] df.columns = cols_to_update 

2) To Rename First N columns (ignoring Last N )

cols_to_update = ['col3_new','col4_new'] + df.columns[N:].tolist() df.columns = cols_to_update 

3) Rename Columns in the middle

cols_to_update = df.columns[:N].tolist() + ['col2_new','col3_new'] + df.columns[Y:].tolist() df.columns = cols_to_update 

4) To rename all columns - Make sure the list you assign is the same length as df.columns.

list = ['col1_new','col2_new', 'col3_new','col4_new'] df.columns = list 

You can find more examples @ Multiple ways to Rename Columns in pandas

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.