переименовать индекс dataframe python
Переименование столбцов в пандах
У меня есть DataFrame, использующий панды и метки столбцов, которые мне нужно отредактировать, чтобы заменить оригинальные метки столбцов.
У меня есть отредактированные имена столбцов, которые хранятся в списке, но я не знаю, как заменить имена столбцов.
21 ответ
Предполагая, что вы можете использовать регулярное выражение. Это решение устраняет необходимость ручного кодирования с использованием регулярных выражений
Панды 0.21+ Ответ
Произошли некоторые существенные обновления переименования столбцов в версии 0.21.
Примеры для панд 0.21+
Построить образец DataFrame:
Использование rename с axis=’columns’ или axis=1
Оба приводят к следующему:
Еще можно использовать сигнатуру старого метода:
Функция rename также принимает функции, которые будут применяться к каждому имени столбца.
Использование set_axis со списком и inplace=False
Нет ничего плохого в том, чтобы напрямую присваивать столбцы. Это совершенно хорошее решение.
Преимущество использования set_axis состоит в том, что он может использоваться как часть цепочки методов и возвращает новую копию DataFrame. Без него вам пришлось бы сохранить промежуточные шаги цепочки в другой переменной перед переназначением столбцов.
Если ваш новый список столбцов находится в том же порядке, что и существующие столбцы, назначение простое:
Если бы у вас был словарь, связанный со старыми именами столбцов и новыми именами столбцов, вы могли бы сделать следующее:
Я знаю этот вопрос и ответ был разжеван до смерти. Но я обратился к нему за вдохновением для решения одной из моих проблем. Я был в состоянии решить это, используя кусочки от разных ответов, поэтому предоставил свой ответ на случай, если кому-то это понадобится.
Мой метод является общим, в котором вы можете добавить дополнительные разделители, разделяя запятую delimiters= запятой и сохраняя ее в будущем.
Возможности объектов Index в pandas / pd 3
В отличие от других структур данных в Python pandas не только пользуется преимуществами высокой производительности массивов NumPy, но и добавляет в них индексы.
Этот выбор оказался крайне удачным. Несмотря на и без того отличную гибкость, которая обеспечивается существующими динамическими структурами, внутренние ссылки на их элементы (а именно ими и являются метки) позволяют разработчикам еще сильнее упрощать операции.
В этом разделе речь пойдет о некоторых базовых функциях, использующих этот механизм:
Переиндексирование df.reindex()
Вы уже знаете, что после объявления в структуре данных объект Index нельзя менять. Но с помощью операции переиндексирования это можно решить.
Существует даже возможность получить новую структуру из уже существующей, где правила индексирования заданы заново.
При операции переиндексирования можно поменять порядок индексов, удалить некоторые из них или добавить новые. Если метка новая, pandas добавит NaN на место соответствующего значения.
В этом случае значения индексов 1 и 2 равны 5, которое принадлежит индексу 3.
item | colors | price | new | object |
---|---|---|---|---|
id | ||||
0 | blue | 1.2 | blue | ball |
1 | green | 1.0 | green | pen |
2 | yellow | 3.3 | yellow | pencil |
3 | red | 0.9 | red | paper |
4 | white | 1.7 | white | mug |
Удаление
Еще одна операция, связанная с объектами Index — удаление. Удалить строку или колонку не составит труда, потому что метки используются для обозначения индексов и названий колонок.
Например, возьмем в качестве примера случай, где из объекта нужно удалить один элемент. Для этого определим базовый объект Series из четырех элементов с 4 отдельными метками.
Для удаления большего количества элементов, передайте массив с соответствующими индексами.
ball | pen | pencil | paper | |
---|---|---|---|---|
red | 0 | 1 | 2 | 3 |
blue | 4 | 5 | 6 | 7 |
yellow | 8 | 9 | 10 | 11 |
white | 12 | 13 | 14 | 15 |
Для удаления строк просто передайте индексы строк.
ball | pen | pencil | paper | |
---|---|---|---|---|
red | 0 | 1 | 2 | 3 |
white | 12 | 13 | 14 | 15 |
ball | paper | |
---|---|---|
red | 0 | 3 |
blue | 4 | 7 |
yellow | 8 | 11 |
white | 12 | 15 |
Арифметика и выравнивание данных
Наверное, самая важная особенность индексов в этой структуре данных — тот факт, что pandas может выравнивать индексы двух разных структур. Это особенно важно при выполнении арифметических операций на их значениях. В этом случае индексы могут быть не только в разном порядке, но и присутствовать лишь в одной из двух структур.
В качестве примера можно взять два объекта Series с разными метками.
При использовании Dataframe выравнивание работает по тому же принципу, но проводится и для рядов, и для колонок.
Rename Pandas DataFrame Index
I’ve a csv file without header, with a DateTime index. I want to rename the index and column name, but with df.rename() only the column name is renamed. Bug? I’m on version 0.12.0
9 Answers 9
The rename method takes a dictionary for the index which applies to index values.
You want to rename to index level’s name:
A good way to think about this is that columns and index are the same type of object ( Index or MultiIndex ), and you can interchange the two via transpose.
This is a little bit confusing since the index names have a similar meaning to columns, so here are some more examples:
You can see the rename on the index, which can change the value 1:
Whilst renaming the level names:
Note: this attribute is just a list, and you could do the renaming as a list comprehension/map.
The currently selected answer does not mention the rename_axis method which can be used to rename the index and column levels.
Pandas has some quirkiness when it comes to renaming the levels of the index. There is also a new DataFrame method rename_axis available to change the index level names.
Let’s take a look at a DataFrame
This DataFrame has one level for each of the row and column indexes. Both the row and column index have no name. Let’s change the row index level name to ‘names’.
The rename_axis method also has the ability to change the column level names by changing the axis parameter:
If you set the index with some of the columns, then the column name will become the new index level name. Let’s append to index levels to our original DataFrame:
Notice how the original index has no name. We can still use rename_axis but need to pass it a list the same length as the number of index levels.
You can use None to effectively delete the index level names.
Series work similarly but with some differences
Let’s create a Series with three index levels
We can use rename_axis similarly to how we did with DataFrames
We can pass a string name to the rename method to change it
DataFrames do not have this attribute and infact will raise an exception if used like this
Prior to pandas 0.21, you could have used rename_axis to rename the values in the index and columns. It has been deprecated so don’t do this
Python | Изменить имена столбцов и индексы строк в Pandas DataFrame
Учитывая Pandas DataFrame, давайте посмотрим, как изменить имена его столбцов и индексы строк.
О Pandas DataFrame
Pandas DataFrame — это прямоугольные сетки, которые используются для хранения данных. Это легко визуализировать и работать с данными, когда хранятся в dataFrame.
Тип Pandas Dataframe имеет два атрибута, называемых «столбцы» и «индекс», которые можно использовать для изменения имен столбцов, а также индексов строк.
Создать DataFrame, используя словарь.
# сначала импортировать библиотеки
import pandas as pd
# Создать dataFrame, используя словарь
# Создает dataFrame с
# 2 столбца и 4 строки
df
# Давайте переименуем уже созданный dataFrame.
# Проверьте текущие имена столбцов
# используя атрибут «столбцы».
# df.columns
# Изменить имена столбцов
# Изменить индексы строк
# печать фрейма данных
df
# давайте изменим имя первого столбца
# от «A» до «a» с помощью функции rename ()
Изменить несколько имен столбцов одновременно —
# Мы можем изменить несколько имен столбцов
# передача словаря старых имен и
# новые имена для функции rename ().
Лямбда-функция — это небольшая анонимная функция, которая может принимать любое количество аргументов, но может иметь только одно выражение. Используя лямбда-функцию, мы можем изменить все имена столбцов одновременно. Давайте добавим ‘x’ в конце имени каждого столбца, используя лямбда-функцию
df = df.rename(columns = lambda x: x + ‘x’ )
# это изменит все имена столбцов
df
Давайте изменим индекс строки, используя функцию Lambda.
# Чтобы изменить индексы строк
# это увеличит значение индекса строки на 10 для каждой строки
df = df.rename(index = lambda x: x + 10 )
Теперь, если мы хотим изменить индексы строк и имена столбцов одновременно, то это может быть достигнуто с помощью функции rename() и передачей атрибута столбца и индекса в качестве параметра.
columns = lambda x: x + ‘x’ )
# увеличить все метки индекса строки на значение 5
# добавьте значение ‘x’ в конце имени каждого столбца.
df
Переименовать Pandas DataFrame Index
7 ответов
Хороший способ подумать об этом заключается в том, что столбцы и индекс имеют один и тот же тип объекта ( Index или MultiIndex ), и вы можете поменять их местами с помощью транспонирования.
Это немного сбивает с толку, так как имена индексов имеют значение, аналогичное столбцам, поэтому вот еще несколько примеров:
Вы можете увидеть переименование в индексе, которое может изменить значение 1:
Переименовывая имена уровней:
Примечание: этот атрибут является просто списком, и вы можете сделать переименование в виде списка / карты.
Вы также можете использовать Index.set_names следующим образом:
Панды имеют некоторую причудливость, когда дело доходит до переименования уровней индекса. Также доступен новый метод DataFrame rename_axis для изменения имен на уровне индекса.
Давайте посмотрим на DataFrame
Этот DataFrame имеет один уровень для каждого индекса строки и столбца. И индекс строки, и столбец не имеют имени. Давайте изменим имя уровня индекса строки на «имена».
Метод rename_axis также имеет возможность изменять имена уровней столбцов, изменяя параметр axis :
Если вы установите индекс для некоторых столбцов, то имя столбца станет именем нового уровня индекса. Давайте добавим уровни индекса к нашему исходному DataFrame:
Вы можете использовать None для эффективного удаления имен уровня индекса.
Сериалы работают аналогично, но с некоторыми отличиями
Давайте создадим серию с тремя уровнями индекса
Мы можем использовать rename_axis аналогично тому, как мы это делали с DataFrames
DataFrames не имеют этого атрибута, и infact вызовет исключение, если используется так
До появления панды 0.21 вы могли бы использовать rename_axis для переименования значений в индексе и столбцах. Это устарело, так что не делайте этого
Если вы хотите использовать одно и то же отображение для переименования обоих столбцов и индекса, вы можете сделать следующее:
Это единственный, кто выполняет эту работу за меня (панды 0.22.0).
Без inplace = True, имя индекса не устанавливается в моем случае.