Изменение имени конкретного столбца в pandas DataFrame

Я искал элегантный способ изменить указанное имя столбца в DataFrame.

данные воспроизведения...

import pandas as pd
d = {
         'one': [1, 2, 3, 4, 5],
         'two': [9, 8, 7, 6, 5],
         'three': ['a', 'b', 'c', 'd', 'e']
    }
df = pd.DataFrame(d)

Самое элегантное решение, которое я нашел до сих пор...

names = df.columns.tolist()
names[names.index('two')] = 'new_name'
df.columns = names

Я надеялся на простой однострочный лайнер... эта попытка не удалась...

df.columns[df.columns.tolist().index('one')] = 'another_name'

Любые подсказки с благодарностью получены.

Ответ 1

Существует один лайнер:

In [27]: df=df.rename(columns = {'two':'new_name'})

In [28]: df
Out[28]: 
  one three  new_name
0    1     a         9
1    2     b         8
2    3     c         7
3    4     d         6
4    5     e         5

Ниже приведена docstring для метода rename.

Definition: df.rename(self, index=None, columns=None, copy=True, inplace=False)
Docstring:
Alter index and / or columns using input function or
functions. Function / dict values must be unique (1-to-1). Labels not
contained in a dict / Series will be left as-is.

Parameters
----------
index : dict-like or function, optional
    Transformation to apply to index values
columns : dict-like or function, optional
    Transformation to apply to column values
copy : boolean, default True
    Also copy underlying data
inplace : boolean, default False
    Whether to return a new DataFrame. If True then value of copy is
    ignored.

See also
--------
Series.rename

Returns
-------
renamed : DataFrame (new object)

Ответ 2

Поскольку аргумент inplace доступен, вам не нужно копировать и присваивать исходный кадр данных самому себе, но выполните следующие действия:

df.rename(columns={'two':'new_name'}, inplace=True)

Ответ 3

Как насчет?

df.columns.values[2] = "new_name"

Ответ 4

Pandas 0,21 теперь имеет параметр оси

Метод переименования получил параметр оси для соответствия большей части остального API pandas.

Итак, в дополнение к этому:

df.rename(columns = {'two':'new_name'})

Вы можете сделать:

df.rename({'two':'new_name'}, axis=1)

или

df.rename({'two':'new_name'}, axis='columns')

Ответ 5

Если вы знаете, какой столбец # это (первый/второй /n-й), то это решение, отправленное по аналогичному вопросу, работает независимо от того, является ли оно именовано или неназванным, и в одной строке: fooobar.com/questions/1559901/...

df.rename(columns = {list(df)[1]:'new_name'}, inplace=True)
# 1 is for second column (0,1,2..)

Ответ 6

Для переименования столбцов здесь прост, который будет работать как для Default(0,1,2,etc;), так и для существующих столбцов, но не очень полезен для больших наборов данных (имеющих много столбцов).

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

df.columns = ['new_name','new_name1','old_name']

Ответ 7

Следующий короткий код может помочь:

df3 = df3.rename(columns={c: c.replace(' ', '') for c in df3.columns})

Удалить пробелы из столбцов.

Ответ 8

версия панды 0.23.4

df.rename(index=str,columns={'old_name':'new_name'},inplace=True)

Для записи:

Пропуск index = str приведет к ошибке, замена имеет неожиданный аргумент 'columns'

Ответ 9

Другой вариант - просто скопировать и удалить столбец:

df = pd.DataFrame(d)
df['new_name'] = df['two']
df = df.drop('two', axis=1)
df.head()

После этого вы получите результат:

    one three   new_name
0   1   a       9
1   2   b       8
2   3   c       7
3   4   d       6
4   5   e       5