Изменение нескольких имен столбцов, но не всех из них - 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