30

Переименование названий столбцов в Pandas

272

Я хочу изменить метки столбцов в DataFrame Pandas с

['$a', '$b', '$c', '$d', '$e']

на

['a', 'b', 'c', 'd', 'e']

Как это можно сделать?

5 ответ(ов)

25

Просто присвойте новые названия атрибуту .columns:

>>> df = pd.DataFrame({'$a':[1,2], '$b': [10,20]})
>>> df
   $a  $b
0   1  10
1   2  20

>>> df.columns = ['a', 'b']
>>> df
   a   b
0  1  10
1  2  20

Таким образом, вы сможете легко изменить названия столбцов в DataFrame.

1

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

df = df.rename(columns=lambda x: x.replace('$', ''))

ИЛИ

df.rename(columns=lambda x: x.replace('$', ''), inplace=True)

Оба варианта выполняют одну и ту же задачу, но второй способ изменяет DataFrame на месте, не создавая копию. Выберите тот, который лучше подходит для вашего случая.

1

Переименование столбцов в Pandas — это простая задача.

Вот пример кода:

df.rename(columns={'$a': 'a', '$b': 'b', '$c': 'c', '$d': 'd', '$e': 'e'}, inplace=True)

В данном примере мы используем метод rename, где передаём словарь с текущими именами столбцов в качестве ключей и новыми именами в качестве значений. Параметр inplace=True позволяет изменить DataFrame на месте, не создавая его копию.

0

Используйте следующий код для переименования столбцов в DataFrame:

old_names = ['$a', '$b', '$c', '$d', '$e'] 
new_names = ['a', 'b', 'c', 'd', 'e']
df.rename(columns=dict(zip(old_names, new_names)), inplace=True)

Таким образом, вы можете вручную редактировать список new_names по вашему усмотрению. Этот подход отлично подходит, когда нужно переименовать только несколько столбцов, чтобы исправить опечатки, акценты, удалить специальные символы и т.д.

0

Названия столбцов против Названий Series

Давайте немного разберём, что происходит "за кулисами".

DataFrames представляют собой набор Series.

Series, в свою очередь, являются расширением numpy.array.

У numpy.array есть свойство .name.

Это имя серии. Редко бывает так, что Pandas учитывает этот атрибут, но оно всё же присутствует и может быть использовано для "взлома" некоторых поведений Pandas.

Название списка столбцов

Многие ответы здесь утверждают, что атрибут df.columns является списком, хотя на самом деле это Series. Это означает, что у него есть атрибут .name.

Вот что произойдет, если вы решите задать имя для вашей Series столбцов:

df.columns = ['column_one', 'column_two']
df.columns.names = ['name of the list of columns']
df.index.names = ['name of the index']

При этом получится следующее:

name of the list of columns     column_one  column_two
name of the index
0                                    4           1
1                                    5           2
2                                    6           3

Обратите внимание, что имя индекса всегда отображается на одну строку ниже.

Артефакты, которые остаются

Атрибут .name иногда остается. Если вы установите df.columns = ['one', 'two'], то df.one.name будет равняться 'one'.

Если затем вы установите df.one.name = 'three', то df.columns по-прежнему будет возвращать ['one', 'two'], а df.one.name даст вам 'three'.

НО

pd.DataFrame(df.one) вернет

    three
0       1
1       2
2       3

Поскольку Pandas повторно использует .name уже определённой Series.

Многоуровневые названия столбцов

Pandas имеет способы создания многоуровневых названий столбцов. Здесь нет особой магии, но я хотел бы упомянуть это в моем ответе, так как не вижу, чтобы кто-то уже отметил это.

    |one            |
    |one      |two  |
0   |  4      |  1  |
1   |  5      |  2  |
2   |  6      |  3  |

Это легко достигается, если задать столбцы как списки, вот так:

df.columns = [['one', 'one'], ['one', 'two']]
Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь