Как убрать индексы в dataframe
Сбросить индекс в Pandas Dataframe
Давайте обсудим, как сбросить индекс в Pandas DataFrame. Часто мы начинаем с огромного фрейма данных в Pandas и после манипулирования / фильтрации фрейма данных мы получаем гораздо меньший фрейм данных.
Итак, давайте посмотрим, как мы можем сбросить индекс DataFrame.
Сначала посмотрите оригинальный DataFrame.
# Импорт пакета панд
import pandas as pd
# Определить словарь, содержащий данные о сотрудниках
# Конвертировать словарь в DataFrame
Выход:
Пример № 1: Создать собственный индекс без удаления индекса по умолчанию.
# Импорт пакета панд
import pandas as pd
# Определить словарь, содержащий данные о сотрудниках
# Конвертировать словарь в DataFrame
df = pd.DataFrame(data, index)
# Сделать собственный индекс в качестве индекса
# В этом случае индекс по умолчанию существует
Выход:
Пример № 2: Создание собственного индекса и удаление индекса по умолчанию.
# Импорт пакета панд
import pandas as pd
# Определить словарь, содержащий данные о сотрудниках
# Создать собственный индекс
# Конвертировать словарь в DataFrame
# Создать собственный индекс и удалить индекс по умолчанию
df = pd.DataFrame(data, index)
Выход:
Пример 3: Сбросить собственный индекс и сделать индекс по умолчанию в качестве индекса.
# Импорт пакета панд
import pandas as pd
# Определить словарь, содержащий данные о сотрудниках
# Создать собственный индекс
# Конвертировать словарь в DataFrame
df = pd.DataFrame(data, index)
# удалить собственный индекс с индексом по умолчанию
Выход:
Пример № 4: Сделать столбец данных в качестве индекса с удалением индекса по умолчанию.
# Импорт пакета панд
import pandas as pd
# Определить словарь, содержащий данные о сотрудниках
# Создать собственный индекс
# Конвертировать словарь в DataFrame
df = pd.DataFrame(data, index)
# установить индекс любого столбца нашего DF и
# удалить индекс по умолчанию
df.set_index([ ‘Age’ ], inplace = True )
Выход:
Пример 5. Создание столбца данных в качестве индекса без удаления индекса по умолчанию.
# Импорт пакета панд
import pandas as pd
# Определить словарь, содержащий данные о сотрудниках
# Создать собственный индекс
# Конвертировать словарь в DataFrame
df = pd.DataFrame(data, index)
# установить любой столбец в качестве индекса
# Здесь мы устанавливаем столбец возраста в качестве индекса
df.set_index([ ‘Age’ ], inplace = True )
# сбросить индекс без удаления индекса по умолчанию
df.reset_index(level = [ ‘Age’ ], inplace = True )
Выход:
pandas.DataFrame.reset_indexВ¶
Reset the index, or a level of it.
Reset the index of the DataFrame, and use the default one instead. If the DataFrame has a MultiIndex, this method can remove one or more levels.
Parameters level int, str, tuple, or list, default None
Only remove the given levels from the index. Removes all levels by default.
drop bool, default False
Do not try to insert index into dataframe columns. This resets the index to the default integer index.
inplace bool, default False
Modify the DataFrame in place (do not create a new object).
col_level int or str, default 0
If the columns have multiple levels, determines which level the labels are inserted into. By default it is inserted into the first level.
col_fill object, default вЂвЂ™
If the columns have multiple levels, determines how the other levels are named. If None then the index name is repeated.
Returns DataFrame or None
Opposite of reset_index.
Change to new indices or expand indices.
Change to same indices as other DataFrame.
When we reset the index, the old index is added as a column, and a new sequential index is used:
We can use the drop parameter to avoid the old index being added as a column:
If the index has multiple levels, we can reset a subset of them:
If we are not dropping the index, by default, it is placed in the top level. We can place it in another level:
When the index is inserted under another level, we can specify under which one with the parameter col_fill :
Возможности объектов 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 выравнивание работает по тому же принципу, но проводится и для рядов, и для колонок.
Как удалить многоиндексные столбцы или строки в dataframe Pandas?
Фреймы данных Pandas предоставляют возможность использования нескольких индексов для маркировки хранимых данных.
Это может использоваться как для столбцов, так и для строк, позволяя вам организовывать определенные типы данных гораздо более эффективным способом.
Можно выбрать различные значения на основе различных уровней индекса.
Чтобы отбросить столбцы или строки мультииндекса в датафрейме, можно использовать метод drop(), как и в случае со стандартными индексами.
Однако необходимо учитывать некоторые дополнительные моменты.
Создание набора данных
Как обычно, перед изучением работы метода drop() в многоиндексных датафреймах, необходимо создать такой, для чего можно использовать следующий код.
В этом примере данные были созданы с помощью функции np.arange() в сочетании с np.reshape() для получения матрицы 6 на 6.
После этого необходимо создать мультииндексы для столбцов и строк.
Существуют различные способы сделать это, но в примере он был создан из кортежей с помощью функции pd.MultiIndex.from_tuples().
После получения мультииндексных объектов dataframe создается обычным способом, используя эти элементы вместо векторов для индексов строк и столбцов.
Удаление строк или столбцов верхнего уровня
Исключение строк или столбцов первого уровня выполняется так же, как и в стандартном случае.
Просто используйте метод drop() объекта, указав в свойстве columns имя удаляемых столбцов или колонок и, аналогично, свойство index для строк.
Таким образом, для удаления столбца B и строки Y вы можете использовать следующую строку кода.
В качестве альтернативы, для удаления строк можно указать только имя строки в методе drop().
В случае со столбцами этого также можно добиться, указав имя и присвоив свойству axis значение 1.
Это требует одного шага для удаления столбцов и другого для строк.
С другой стороны, если вы хотите удалить более одного столбца или строки, вам просто нужно передать вектор с индексами, которые вы хотите удалить.
Поэтому для удаления столбцов A и B одновременно со строками X и Z вы можете ввести следующую команду.
Удаление столбцов или строк мультииндекса
Теперь, в случае, если мы хотим удалить столбцы C2 второго уровня, использование того, что было объяснено до сих пор, приведет к ошибке.
Чтобы избежать этого, необходимо указать через свойство level функции drop(), что вы хотите удалить столбец второго уровня.
То есть, присвоив свойству значение 1, как показано ниже.
На самом деле, в этом есть большой смысл, поскольку в случае, когда один и тот же тег используется в двух разных уровнях, Pandas не может знать, какой из них удалить. Поэтому необходимо указать уровень, на котором вы хотите его применить, если он не первый.
В случае с рядами процесс аналогичен предыдущему.
Как и для индексов первого уровня, также возможно удаление строк и столбцов с помощью одной инструкции. Однако они должны быть одного уровня.
Сглаживание индексов
В примере, после удаления строки и столбца второго уровня, наличие нескольких индексов является излишним.
Это можно решить, удалив лишние уровни с помощью метода droplevel() индексов.
Метод, единственным параметром которого является уровень, который вы хотите удалить из индексов, по умолчанию это первый уровень (0).
Использовать его просто, достаточно применить его к индексу и присвоить результат датафрейму, как показано в следующем примере.
Однако в данном случае может быть интереснее убрать индексы второго уровня.
В случае если вы хотите сохранить оба индекса, но удалить подуровни:
Заключение
В этой записи мы рассмотрели использование метода drop() для удаления столбцов или строк мультииндекса в фрейме данных Pandas.
Remove index name in pandas
I have a dataframe like this one:
How to remove index name foo from that dataframe? The desired output is like this:
6 Answers 6
Alternatively you can just assign None to the index.name attribute:
Use del df.index.name
From version 0.18.0 you can use rename_axis :
Took me way too long to find an answer that actually worked for me. See below.
I’m sure some of these other answers are working for other people, but they definitely didn’t work for me 🙁
for your case, just use the following code. tested on pandas 1.0.1.
Not the answer you’re looking for? Browse other questions tagged python pandas indexing rowname or ask your own question.
Linked
Related
Hot Network Questions
Subscribe to RSS
To subscribe to this RSS feed, copy and paste this URL into your RSS reader.
site design / logo © 2021 Stack Exchange Inc; user contributions licensed under cc by-sa. rev 2021.12.22.41046
By clicking “Accept all cookies”, you agree Stack Exchange can store cookies on your device and disclose information in accordance with our Cookie Policy.