Изменение нескольких имен столбцов, но не всех из них - Pandas Python

Я хотел бы знать, есть ли функция для изменения имен конкретных столбцов, но без выбора определенного имени или без изменения всех них.

У меня есть код:

df=df.rename(columns = {'nameofacolumn':'newname'})

Но с этим мне нужно вручную изменить каждый из них, записывая каждое имя. Также, чтобы изменить все из них, я

df = df.columns['name1','name2','etc']

Я хотел бы иметь функцию для изменения столбцов 1 и 3, не записывая их имена, просто указывая их местоположение. Спасибо!

Ответ 1

Вы можете использовать понимание dict и передать это на rename:

In [246]:
df = pd.DataFrame(columns=list('abc'))
new_cols=['d','e']
df.rename(columns=dict(zip(df.columns[1:], new_cols)),inplace=True)
df

Out[246]:
Empty DataFrame
Columns: [a, d, e]
Index: []

Он также работает, если вы передаете список порядковых позиций:

df.rename(columns=dict(zip(df.columns[[1,2]], new_cols)),inplace=True)

Ответ 2

скажем, что у вас есть словарь новых имен столбцов и имя столбца, который они должны заменить:

df.rename(columns={'old_col':'new_col', 'old_col_2':'new_col_2'}, inplace=True)

Но, если у вас этого нет, и у вас есть только индексы, вы можете сделать это:

column_indices = [1,4,5,6]
new_names = ['a','b','c','d']
old_names = df.columns[column_indices]
df.rename(columns=dict(zip(old_names, new_names)), inplace=True)

Ответ 3

Вам вообще не нужно использовать метод переименования.

Вы просто заменяете старые имена столбцов новыми, используя списки. Чтобы переименовать столбцы 1 и 3 (с индексами 0 и 2), вы делаете что-то вроде этого:

df.columns.values[[0, 2]] = ['newname0', 'newname2']

или, возможно, если вы используете более старую версию pandas, чем 0,16.0, вы делаете:

df.keys().values[[0, 2]] = ['newname0', 'newname2']

Преимущество этого подхода состоит в том, что вам не нужно копировать весь фрейм данных с синтаксисом df = df.rename, вы просто изменяете значения индекса.

Ответ 4

Вы должны иметь возможность ссылаться на столбцы по индексу, используя .df.columns [index]

>> temp = pd.DataFrame(np.random.randn(10, 5),columns=['a', 'b', 'c', 'd', 'e'])
>> print(temp.columns[0])
   a  
>> print(temp.columns[1])
   b

Итак, чтобы изменить значение конкретных столбцов, сначала назначьте значения массиву и измените только те значения, которые вы хотите

>> newcolumns=temp.columns.values
>> newcolumns[0] = 'New_a'

Назначьте новый массив обратно в столбцы, и у вас будет то, что вам нужно

>> temp.columns = newcolumns
>> temp.columns
>> print(temp.columns[0])
   New_a