.rename()
и .rename_axis()
;DataFrame.rename()
;Series.rename()
;Index.rename()
;DataFrame.rename_axis()
;Series.rename_axis()
..rename()
и .rename_axis()
Метод .rename()
объектов Series
/DataFrame
позволяет перемаркировать ось на основе некоторого сопоставления (словаря или серии) или произвольной функции.
>>> import pandas as pd >>> import numpy as np >>> s = pd.Series(np.random.randn(5), index=["a", "b", "c", "d", "e"]) >>> s # a -0.485214 # b 1.546495 # c -0.496277 # d 2.006134 # e -0.438663 # dtype: float64 >>> s.rename(str.upper) # A -0.485214 # B 1.546495 # C -0.496277 # D 2.006134 # E -0.438663 # dtype: float64
Если передается функция, то она должна возвращать значение при вызове с любой из меток (и должна создавать набор уникальных значений). Также можно использовать словарь dict
или Series
:
df = pd.DataFrame( { "one": pd.Series(np.random.randn(3), index=["a", "b", "c"]), "two": pd.Series(np.random.randn(4), index=["a", "b", "c", "d"]), "three": pd.Series(np.random.randn(3), index=["b", "c", "d"]), } ) >>> df # one two three # a -0.826557 -0.564500 NaN # b -0.208274 0.220010 0.292087 # c -0.249032 0.727930 -0.757377 # d NaN -1.258104 -0.742752 # переименовываем столбцы и индексные метки >>> df.rename( ... columns={"one": "foo", "two": "bar"}, ... index={"a": "apple", "b": "banana", "d": "durian"}, ... ) # foo bar three # apple -0.826557 -0.564500 NaN # banana -0.208274 0.220010 0.292087 # c -0.249032 0.727930 -0.757377 # durian NaN -1.258104 -0.742752
Если словарь не включает метку столбца/индекса, то она не переименовывается. Обратите внимание, что дополнительные метки в сопоставлении не вызывают ошибки.
DataFrame.rename()
также поддерживает соглашение о вызовах в стиле оси, где указывается один преобразователь mapper
и ось axis
, к которой будет применено это сопоставление (функция или словарь).
>>> df.rename({"one": "foo", "two": "bar"}, axis="columns") # foo bar three # a -0.826557 -0.564500 NaN # b -0.208274 0.220010 0.292087 # c -0.249032 0.727930 -0.757377 # d NaN -1.258104 -0.742752 >>> df.rename({"a": "apple", "b": "banana", "d": "durian"}, axis="index") # one two three # apple -0.826557 -0.564500 NaN # banana -0.208274 0.220010 0.292087 # c -0.249032 0.727930 -0.757377 # durian NaN -1.258104 -0.742752
Наконец, метод .rename()
также принимает скаляр или список для изменения атрибута Series.name
.
>>> s.rename("scalar-name") # a -0.485214 # b 1.546495 # c -0.496277 # d 2.006134 # e -0.438663 # Name: scalar-name, dtype: float64
Методы DataFrame.rename_axis()
и Series.rename_axis()
позволяют изменять определенные имена MultiIndex
(в отличие от меток).
df = pd.DataFrame( {"x": [1, 2, 3, 4, 5, 6], "y": [10, 20, 30, 40, 50, 60]}, index=pd.MultiIndex.from_product( [["a", "b", "c"], [1, 2]], names=["let", "num"] ), ) >>> df # x y # let num # a 1 1 10 # 2 2 20 # b 1 3 30 # 2 4 40 # c 1 5 50 # 2 6 60 >>> df.rename_axis(index={"let": "abc"}) # x y # abc num # a 1 1 10 # 2 2 20 # b 1 3 30 # 2 4 40 # c 1 5 50 # 2 6 60 >>> df.rename_axis(index=str.upper) # x y # LET NUM # a 1 1 10 # 2 2 20 # b 1 3 30 # 2 4 40 # c 1 5 50 # 2 6 60
DataFrame.rename(mapper=None, *, index=None, columns=None, axis=None, copy=None, inplace=False, level=None, errors='ignore')
:Метод DataFrame.rename()
переименовывает столбцы или метки индексов. Значения функции/словаря должны быть уникальными (один-к-одному). Метки, не содержащиеся в словаре/Series
, останутся как есть. Перечисленные отсутствующие метки ошибок не вызывают.
mapper=None
- словарь или вызываемый объект для преобразования, применяемые к значениям этой оси. Одновременно используется аргументы либо mapper
и axis
, чтобы указать целевую ось для сопоставителя, либо index
и columns
.index=None
- альтернатива указанию axis
(указание аргументов mapper, axis=0
эквивалентно index=mapper
).columns=None
- альтернатива указанию axis
(указание аргументов mapper, axis=1
эквивалентно columns=mapper
).axis=None
- ось для таргетинга с помощью mapper
. Может быть либо именем оси (index
, columns
), либо номером (0, 1). По умолчанию используется index
.inplace=False
- следует ли изменять DataFrame
, а не создавать новый. Если True
, то аргумент copy
игнорируется.level=None
- В случае MultiIndex
будут переименовываться метки только на указанном уровне.errors='ignore'
- если передана строка ‘raise’
, то поднимется исключение KeyError
, когда mapper
, index
или columns
содержат метки, которых нет в преобразуемом индексе. Если 'ignore'
, то существующие ключи будут переименованы, а несуществующие будут проигнорированы.copy=None
- копирует базовые данные.
Ключевой аргумент
copy
изменит поведение вpandas 3.0
. Копирование при записи будет включено по умолчанию, что означает, что все методы сcopy
будут использовать механизм отложенного копирования. Ключевое слово copy будет удалено в будущей версииpandas
. Эту функциональность уже можно включить установивpd.options.mode.copy_on_write = True
DataFrame
:DataFrame.rename()
поддерживает два соглашения о вызовах:
Настоятельно рекомендуется использовать ключевые аргументы, чтобы читающий ваш код программист понял что происходит.
Переименовывание столбцов с помощью словаря:
>>> df = pd.DataFrame({"A": [1, 2, 3], "B": [4, 5, 6]}) >>> df.rename(columns={"A": "a", "B": "c"}) # a c # 0 1 4 # 1 2 5 # 2 3 6
Переименовывание индекса с помощью словаря:
>>> df.rename(index={0: "x", 1: "y", 2: "z"}) # A B # x 1 4 # y 2 5 # z 3 6
Приведение индексных меток к другому типу:
>>> df.index # RangeIndex(start=0, stop=3, step=1) >>> df.rename(index=str).index # Index(['0', '1', '2'], dtype='object')
Поведение метода при аргументе errors="raise"
:
>>> df.rename(columns={"A": "a", "B": "b", "C": "c"}, errors="raise") # Traceback (most recent call last): # ... # raise KeyError(f"{missing_labels} not found in axis")
Использование аргументов "стиля оси":
>>> df.rename(str.lower, axis='columns') # a b # 0 1 4 # 1 2 5 # 2 3 6 >>> df.rename({1: 2, 2: 4}, axis='index') # A B # 0 1 4 # 2 2 5 # 4 3 6
Series.rename(index=None, *, copy=None, inplace=False, level=None, errors='ignore')
:Метод Series.rename()
переименовывает индексные метки или имя самой серии Series
.
Значения функции/словаря должны быть уникальными (1-к-1). Метки, не содержащиеся в dict
/Series
, останутся как есть. Перечисленные несуществующие метки не вызывают ошибок при errors='ignore'
.
Альтернативно изменить имя серии на скалярное значение можно атрибутом Series.name
.
index=None
- функция или сопоставление (например, словарь), применяемые к индексу. Скалярная или хешируемая последовательность будет изменять атрибут Series.name
.inplace=False
- следует ли изменять Series
, а не создавать новый. Если True
, то аргумент copy
игнорируется.level=None
- В случае MultiIndex
будут переименовываться индексные метки только на указанном уровне.errors='ignore'
- если передана строка ‘raise’
, то поднимется исключение KeyError
, когда index
содержит метки, которых нет в преобразуемом индексе. Если 'ignore'
, то существующие ключи будут переименованы, а несуществующие будут проигнорированы.copy=None
- копирует базовые данные.
Ключевой аргумент
copy
изменит поведение вpandas 3.0
. Копирование при записи будет включено по умолчанию, что означает, что все методы сcopy
будут использовать механизм отложенного копирования. Ключевое слово copy будет удалено в будущей версииpandas
. Эту функциональность уже можно включить установивpd.options.mode.copy_on_write = True
Series
:>>> import pandas as pd >>> s = pd.Series([1, 2, 3]) >>> s # 0 1 # 1 2 # 2 3 # dtype: int64
Скаляр меняет Series.name
>>> s.rename("my_name") # 0 1 # 1 2 # 2 3 # Name: my_name, dtype: int64
Функция изменяет индексные метки
>>> s.rename(lambda x: x ** 2) # 0 1 # 1 2 # 4 3 # dtype: int64
Словарь изменяет индексные метки
>>> s.rename({1: 3, 2: 5}) # 0 1 # 3 2 # 5 3 # dtype: int64
Index.rename(name, *, inplace=False)
:Метод Index.rename()
изменяет имя индекса или MultiIndex
.
Другими словами, этот метод дает возможность устанавливать новые имена без уровня. По умолчанию возвращается новый индекс. Длина имен должна соответствовать количеству уровней в MultiIndex
.
name
- индексная метка или их список для переименования.inplace=False
- изменяет объект напрямую, вместо создания нового индекса или MultiIndex
.Index
или его индексных меток:Изменяем имя индекса Index
:
>>> import pandas as pd >>> idx = pd.Index(['A', 'C', 'A', 'B'], name='score') >>> idx.rename('grade') # Index(['A', 'C', 'A', 'B'], dtype='object', name='grade')
Работа с MultiIndex
:
idx = pd.MultiIndex.from_product([['python', 'cobra'], [2018, 2019]], names=['kind', 'year']) >>> idx # MultiIndex([('python', 2018), # ('python', 2019), # ( 'cobra', 2018), # ( 'cobra', 2019)], # names=['kind', 'year']) >>> idx.rename(['species', 'year']) # MultiIndex([('python', 2018), # ('python', 2019), # ( 'cobra', 2018), # ( 'cobra', 2019)], # names=['species', 'year']) >>> idx.rename('species') # Traceback (most recent call last): # TypeError: Must pass list-like as `names`.
DataFrame.rename_axis(mapper=no_default, *, index=no_default, columns=no_default, axis=0, copy=None, inplace=False)
:Series.rename_axis(mapper=no_default, *, index=no_default, copy=True, inplace=False)
:Метод DataFrame.rename_axis()
и Series.rename_axis()
переименовывает имя оси для индекса или столбцов.
mapper=no_default
- значение для установки атрибута имени оси. Принимает скалярное значение или список.index
, columns
- преобразователь, может быть скалярным значением, списком, словарем или вызываемым объектом, которые будут применяться к значениям этой оси. Обратите внимание, что аргумент columns
недопустим, если объект представляет собой серию Series
. Эти аргументы применяется только к объектам типа DataFrame
.axis=0
- ось, которую нужно переименовать. Для Series
этот аргумент не используется и по умолчанию равен 0.inplace=False
- изменяет объект напрямую, вместо создания новой Series
или DataFrame
.copy=None
- копирует базовые данные.
Ключевой аргумент
copy
изменит поведение вpandas 3.0
. Копирование при записи будет включено по умолчанию, что означает, что все методы сcopy
будут использовать механизм отложенного копирования. Ключевое слово copy будет удалено в будущей версииpandas
. Эту функциональность уже можно включить установивpd.options.mode.copy_on_write = True
Метод DataFrame.rename_axis()
поддерживает два соглашения о вызовах.
(index=index_mapper, columns=columns_mapper, ...)
;(mapper, axis={'index', 'columns'}, ...)
.Первое соглашение о вызовах будет изменять только имена индекса и/или имена объекта Index
, который является столбцами. В этом аргумент copy
игнорируется.
Второе соглашение о вызовах изменит имена соответствующего индекса, если преобразователь mapper
является списком или скаляром. Однако, если mapper
- это словарь dict
или функция, то он будет использовать устаревшее поведение изменения меток осей.
Настоятельно рекомендуется использовать ключевые аргументы, чтобы прояснить ваши намерения.
Пример для Series
:
>>> import pandas as pd >>> s = pd.Series(["dog", "cat", "monkey"]) >>> s # 0 dog # 1 cat # 2 monkey # dtype: object >>> s.rename_axis("animal") # animal # 0 dog # 1 cat # 2 monkey # dtype: object
Пример для DataFrame
:
df = pd.DataFrame({"num_legs": [4, 4, 2], "num_arms": [0, 0, 2]}, ["dog", "cat", "monkey"]) >>> df # num_legs num_arms # dog 4 0 # cat 4 0 # monkey 2 2
Переименование названия индекса строк
>>> df = df.rename_axis("animal") >>> df # num_legs num_arms # animal # dog 4 0 # cat 4 0 # monkey 2 2
Переименование названия индекса столбцов
>>> df = df.rename_axis("limbs", axis="columns") >>> df # limbs num_legs num_arms # animal # dog 4 0 # cat 4 0 # monkey 2 2
Пример для MultiIndex
:
df.index = pd.MultiIndex.from_product([['mammal'], ['dog', 'cat', 'monkey']], names=['type', 'name']) >>> df # limbs num_legs num_arms # type name # mammal dog 4 0 # cat 4 0 # monkey 2 2
>>> df.rename_axis(index={'type': 'class'}) # limbs num_legs num_arms # class name # mammal dog 4 0 # cat 4 0 # monkey 2 2
>>> df.rename_axis(columns=str.upper) # LIMBS num_legs num_arms # type name # mammal dog 4 0 # cat 4 0 # monkey 2 2