Переименовать определенный столбец(ы) в панд

Я've получили таблицу данных под названием "данные". Как бы мне переименовать только один заголовок столбца? Например ВВП в журнал(ВВП)?

data =
    y  gdp  cap
0   1    2    5
1   2    3    9
2   8    7    2
3   3    4    7
4   6    7    7
5   4    8    3
6   8    2    8
7   9    9   10
8   6    6    4
9  10   10    7
Комментарии к вопросу (1)
Решение
data.rename(columns={'gdp':'log(gdp)'}, inplace=True)

В rename показывают, что он принимает дикт качестве param для столбцы, так что вы просто пройти дикт с одной записи.

Также см. обзоры

Комментарии (10)

Гораздо быстрее реализация будет использовать список понимание-если вам нужно переименовать один столбец.

df.columns = ['log(gdp)' if x=='gdp' else x for x in df.columns]

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

df.columns = ['log(gdp)' if x=='gdp' else 'cap_mod' if x=='cap' else x for x in df.columns]

Или, создайте сопоставление с помощью "толкового словаря" и выполнить список-понимание с его'ы сделать операции по умолчанию значение, так как старое название:

col_dict = {'gdp': 'log(gdp)', 'cap': 'cap_mod'}   ## key→old name, value→new name

df.columns = [col_dict.get(x, x) for x in df.columns]

Сроки:

%%timeit
df.rename(columns={'gdp':'log(gdp)'}, inplace=True)
10000 loops, best of 3: 168 µs per loop

%%timeit
df.columns = ['log(gdp)' if x=='gdp' else x for x in df.columns]
10000 loops, best of 3: 58.5 µs per loop
Комментарии (0)

как переименовать конкретного столбца в панды?

От v0.24+, чтобы переименовать одну (или более) столбцов одновременно

  • DataFrame.rename() с оси=1 или ось='и#39; (аргумент " оси " был введен в версии v0.21`.

  • Index.str.replace() строка/регулярное выражение замены на основе.

Если вам нужно переименовать все колонки сразу,

  • DataFrame.set_axis() способ с оси=1. Передать список-как последовательность. Параметры доступны для изменения на месте, а также.

переименовать с оси=1

df = pd.DataFrame('x', columns=['y', 'gdp', 'cap'], index=range(5))
df

   y gdp cap
0  x   x   x
1  x   x   x
2  x   x   x
3  x   x   x
4  x   x   x

С 0.21+ теперь можно указать параметр " оси " с "переименовать":

df.rename({'gdp':'log(gdp)'}, axis=1)
# df.rename({'gdp':'log(gdp)'}, axis='columns')

   y log(gdp) cap
0  x        x   x
1  x        x   x
2  x        x   x
3  x        x   x
4  x        x   x

(Заметим, что "переименовать" не в месте по умолчанию, так что вам будет нужно присвоить результат обратно.)

Это дополнение было сделано для улучшения согласованности с остальной частью интерфейса API. Аргумент новой " оси " является аналогом параметра—они столбцы делать то же самое.

df.rename(columns={'gdp': 'log(gdp)'})

   y log(gdp) cap
0  x        x   x
1  x        x   x
2  x        x   x
3  x        x   x
4  x        x   x

"переименовать" также принимает обратного вызова, который вызывается один раз для каждого столбца.

df.rename(lambda x: x[0], axis=1)
# df.rename(lambda x: x[0], axis='columns')

   y  g  c
0  x  x  x
1  x  x  x
2  x  x  x
3  x  x  x
4  x  x  x

Для этого конкретного сценария, вы хотели бы использовать

df.rename(lambda x: 'log(gdp)' if x == 'gdp' else x, axis=1)

Index.str.replace

Похожие на "заменить" метод строки в Python, индекс панды и серии (объекта только dtype) определяют ул. а (то"построить" в)`.заменить способ для String и regex на основе замены.

df.columns = df.columns.str.replace('gdp', 'log(gdp)')
df

   y log(gdp) cap
0  x        x   x
1  x        x   x
2  x        x   x
3  x        x   x
4  x        x   x

Преимущество над другими методами STR это`.замените поддерживает регулярные выражения (включены по умолчанию). Увидеть Docs для получения дополнительной информации.


Передав список в set_axis с оси=1

Называть set_axis с собой список заголовков(ы). В списке должны быть равны по длине колонны/размер индекса. set_axis видоизменяет исходную таблицу данных по умолчанию, но вы можете указать параметр inplace=false` для возврата измененная копия.

df.set_axis(['cap', 'log(gdp)', 'y'], axis=1, inplace=False)
# df.set_axis(['cap', 'log(gdp)', 'y'], axis='columns', inplace=False)

  cap log(gdp)  y
0   x        x  x
1   x        x  x
2   x        x  x
3   x        x  x
4   x        x  x

Примечание: в будущих выпусках, месте по умолчанию правда.

Способ Сцепления Почему выберите set_axis, когда у нас уже есть эффективный способ присвоения колонны с ДФ.столбцы = ...? Как показали Тед Петроу в [этот ответ],(https://stackoverflow.com/a/46912050/4909087)set_axis` это полезно, когда пытается методов цепь.

Сравнить

# new for pandas 0.21+
df.some_method1()
  .some_method2()
  .set_axis()
  .some_method3()

Против

# old way
df1 = df.some_method1()
        .some_method2()
df1.columns = columns
df1.some_method3()

Бывший является более естественной и свободной синтаксис.

Комментарии (0)