Переименование названий столбцов в Pandas
Я хочу изменить метки столбцов в DataFrame Pandas с
['$a', '$b', '$c', '$d', '$e']
на
['a', 'b', 'c', 'd', 'e']
Как это можно сделать?
5 ответ(ов)
Просто присвойте новые названия атрибуту .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.
Если вы хотите просто удалить знак $
из всех имен столбцов, вы можете сделать это следующим образом:
df = df.rename(columns=lambda x: x.replace('$', ''))
ИЛИ
df.rename(columns=lambda x: x.replace('$', ''), inplace=True)
Оба варианта выполняют одну и ту же задачу, но второй способ изменяет DataFrame на месте, не создавая копию. Выберите тот, который лучше подходит для вашего случая.
Переименование столбцов в Pandas — это простая задача.
Вот пример кода:
df.rename(columns={'$a': 'a', '$b': 'b', '$c': 'c', '$d': 'd', '$e': 'e'}, inplace=True)
В данном примере мы используем метод rename
, где передаём словарь с текущими именами столбцов в качестве ключей и новыми именами в качестве значений. Параметр inplace=True
позволяет изменить DataFrame на месте, не создавая его копию.
Используйте следующий код для переименования столбцов в 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
по вашему усмотрению. Этот подход отлично подходит, когда нужно переименовать только несколько столбцов, чтобы исправить опечатки, акценты, удалить специальные символы и т.д.
Названия столбцов против Названий 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']]
"Красивая печать всей Series / DataFrame в Pandas"
Запись DataFrame pandas в CSV файл
Преобразование списка словарей в DataFrame pandas
Объединение двух столбцов текста в DataFrame pandas
Неоднозначное значение истинности Series. Используйте a.empty, a.bool(), a.item(), a.any() или a.all()