Python изменить название колонки

Трансформация данных в pandas ч.1 / pd 11

Процесс подготовки данных для анализа включает сборку данных в Dataframe с возможными добавлениями из других объектов и удалением ненужных частей. Следующий этап — трансформация. После того как данные внутри структуры организованы, нужно преобразовать ее значения. Этот раздел будет посвящен распространенным проблемам и процессам, которые требуются для их решения с помощью функций библиотеки pandas.

Среди них удаление элементов с повторяющимися значениями, изменение индексов, обработка числовых значений данных и строк.

Удаление повторов

Дубликаты строк могут присутствовать в Dataframe по разным причинам. И в объектах особо крупного размера их может быть сложно обнаружить. Для этого в pandas есть инструменты анализа повторяющихся данных для крупных структур.

Для начала создадим простой Dataframe с повторяющимися строками.

Функция duplicated() способна обнаружить дубликаты. Она вернет объект Series , состоящий из булевых значений, где каждый элемент соответствует строке. Их значения равны True , если строка является дубликатом (все повторения за исключением первого) и False , если повторов этого элемента не было.

Объект с булевыми элементами может быть особенно полезен, например, для фильтрации. Так, чтобы увидеть строки-дубликаты, нужно просто написать следующее:

Читайте также:  Колонка бош не греет воду причины

Обычно повторяющиеся строки удаляются. Для этого в pandas есть функция drop_duplicates() , которая возвращает Dataframe без дубликатов.

Маппинг

Библиотека pandas предоставляет набор функций, использующих маппинг для выполнения определенных операций. Маппинг — это всего лишь создание списка совпадений двух разных значений, что позволяет привязывать значение определенной метке или строке.

Для определения маппинга лучше всего подходит объект dict :

Функции, которые будут дальше встречаться в этом разделе, выполняют конкретные операции, но всегда принимают объект dict .

• replace() — Заменяет значения
• map() — Создает новый столбец
• rename() — Заменяет значения индекса

Замена значений с помощью маппинга

Часто бывает так, что в готовой структуре данных присутствуют значения, не соответствующие конкретным требованиям. Например, текст может быть написан на другом языке, являться синонимом или, например, выраженным в другом виде. В таких случаях используется операция замены разных значений.

Для примера определим Dataframe с разными объектами и их цветами, включая два названия цветов не на английском.

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

Теперь осталось использовать функцию replace() , задав маппинг в качестве аргумента.

Как видно выше, два цвета были заменены на корректные значения в Dataframe . Распространенный пример — замена значений NaN на другие, например, на 0. Функция replace() отлично справляется и с этим.

Добавление значений с помощью маппинга

В предыдущем примере вы узнали, как менять значения с помощью маппинга. Теперь попробуем использовать маппинг на другом примере — для добавления новых значений в колонку на основе значений в другой. Маппинг всегда определяется отдельно.

Предположим, что нужно добавить колонку с ценой вещи из объекта. Также предположим, что имеется список цен. Определим его в виде объекта dict с ценами для каждого типа объекта.

Функция map() , примененная к Series или колонке объекта Dataframe принимает функцию или объект с маппингом dict . В этому случае можно применить маппинг цен для элементов колонки, добавив еще одну колонку price в Dataframe .

Переименование индексов осей

По примеру того, как работает изменение значений в Series и Dataframe , можно трансформировать метки оси с помощью маппинга. Для замены меток индексов в pandas есть функция rename() , которая принимает маппинг (объект dict ) в качестве аргумента.

По умолчанию переименовываются индексы. Если же нужно поменять названия колонок, то используется параметр columns . В следующем примере присвоим несколько маппингов двум индексам с параметром columns .

В тех случаях когда заменить нужно только одно значение, все можно и не писать.

Пока что функция rename() возвращала объект Dataframe с изменениями, не трогая оригинальный объект. Но если нужно поменять его, то необходимо передать значение True параметру inplace .

Дискретизация и биннинг

Более сложный процесс преобразования называется дискретизацией. Он используется для обработки большим объемов данных. Для анализа их необходимо разделять на дискретные категории, например, распределив диапазон значений на меньшие интервалы и посчитав статистику для каждого. Еще один пример — большое количество образцов. Даже здесь необходимо разделять весь диапазон по категориям и внутри них считать вхождения и статистику.

В следующем случае, например, нужно работать с экспериментальными значениями, лежащими в диапазоне от 0 до 100. Эти данные собраны в список.

Вы знаете, что все значения лежат в диапазоне от 0 до 100, а это значит, что их можно разделить на 4 одинаковых части, бины. В первом будут элементы от 0 до 25, во втором — от 26 до 50, в третьем — от 51 до 75, а в последнем — от 75 до 100.

Для этого в pandas сначала нужно определить массив со значениями разделения:

Затем используется специальная функция cut() , которая применяется к массиву. В нее нужно добавить и бины.

Функция cut() возвращает специальный объект типа Categorical . Его можно считать массивом строк с названиями бинов. Внутри каждая содержит массив categories , включающий названия разных внутренних категорий и массив codes со списком чисел, равных элементам results . Число соответствует бину, которому был присвоен соответствующий элемент results .

Чтобы узнать число вхождений каждого бина, то есть, результаты для всех категорий, нужно использовать функцию value_counts() .

У каждого класса есть нижний предел с круглой скобкой и верхний — с квадратной. Такая запись соответствует математической, используемой для записи интервалов. Если скобка квадратная, то число лежит в диапазоне, а если круглая — то нет.

Бинам можно задавать имена, передав их в массив строк, а затем присвоив его параметру labels в функции cut() , которая используется для создания объекта Categorical .

Если функции cut() передать в качестве аргумента целое число, а не границы бина, то диапазон значений будет разделен на указанное количество интервалов.

Пределы будут основаны на минимуме и максимуме данных.

Также в pandas есть еще одна функция для биннинга, qcut() . Она делит весь набор на квантили. Так, в зависимости от имеющихся данных cut() обеспечит разное количество данных для каждого бина. А qcut() позаботится о том, чтобы количество вхождений было одинаковым. Могут отличаться только границы.

В этом примере видно, что интервалы отличаются от тех, что получились в результате использования функции cut() . Также можно обратить внимание на то, что qcut() попыталась стандартизировать вхождения для каждого бина, поэтому в первых двух больше вхождений. Это связано с тем, что количество объектов не делится на 5.

Определение и фильтрация лишних данных

При анализе данных часто приходится находить аномальные значения в структуре данных. Для примера создайте Dataframe с тремя колонками целиком случайных чисел.

С помощью функции describe() можно увидеть статистику для каждой колонки.

Лишними можно считать значения, которые более чем в три раза больше стандартного отклонения. Чтобы оставить только подходящие, нужно использовать функцию std() .

Теперь используйте фильтр для всех значений Dataframe , применив соответствующее стандартное отклонение для каждой колонки. Функция any() позволит использовать фильтр для каждой колонки.

Перестановка

Операции перестановки (случайного изменения порядка) в объекте Series или строках Dataframe можно выполнить с помощью функции numpy.random.permutation() .

Для этого примера создайте Dataframe с числами в порядке возрастания.

Теперь создайте массив из пяти чисел от 0 до 4 в случайном порядке с функцией permutation() . Этот массив будет новым порядком, в котором потребуется разместить и значения строк из Dataframe .

Теперь примените его ко всем строкам Dataframe с помощью функции take() .

Как видите, порядок строк поменялся, а индексы соответствуют порядку в массиве new_order .

Перестановку можно произвести и для отдельной части Dataframe . Это сгенерирует массив с последовательностью, ограниченной конкретным диапазоном, например, от 2 до 4.

Случайная выборка

Вы уже знаете, как доставать отдельные части Dataframe для последующей перестановки. Но иногда ее потребуется отобрать случайным образом. Проще всего сделать это с помощью функции np.random.randint() .

В этом случае один и тот же участок попадается даже чаще.

Источник

Как переименовать столбец Pandas DataFrame в Python

В этом уроке мы рассмотрим, как переименовать столбец фрейма данных Pandas в Python. Мы рассмотрим функцию rename (), а также создание нового фрейма данных.

Автор: Hassan Saeed
Дата записи

Вступление

Pandas – это библиотека Python для анализа и манипулирования данными. Почти все операции в pandas вращаются вокруг Фрейма данных s.

A Data frame is-это абстрактное представление двумерной таблицы, которая может содержать все виды данных. Они также позволяют нам давать имена всем столбцам, поэтому часто столбцы называются атрибутами или полями при использовании DataFrames .

В этой статье мы увидим, как мы можем переименовать уже существующие столбцы DataFrame .

Существует два варианта манипулирования именами столбцов фрейма данных :

  1. Переименование столбцов существующего фрейма данных
  2. Назначение пользовательских имен столбцов при создании нового фрейма данных

Давайте рассмотрим оба метода.

Переименование столбцов существующего фрейма данных

У нас есть образец DataFrame ниже:

Фрейм данных |/df выглядит следующим образом:

Чтобы переименовать столбцы этого DataFrame , мы можем использовать метод rename () , который принимает:

  1. Словарь в качестве аргумента columns , содержащий сопоставление исходных имен столбцов с новыми именами столбцов в виде пар ключ-значение
  2. A логическое значение в качестве аргумента inplace , который, если установлен в True внесет изменения в исходный Фрейм данных

Давайте изменим имена столбцов в нашем Фрейме данных с Name, age на First Name, Age .

Теперь наш df содержит:

Назначение имен столбцов При создании фрейма данных

Теперь мы обсудим, как назначать имена столбцов при создании DataFrame .

Это особенно полезно, когда вы создаете DataFrame из файла csv и хотите игнорировать имена столбцов заголовка и назначать свои собственные.

Передавая список в аргумент names , мы можем переопределить уже существующий столбец заголовка своим собственным. Список должен иметь имя для каждого столбца данных, в противном случае возникает исключение.

Обратите внимание, что если мы хотим переименовать только несколько столбцов, то лучше использовать метод rename для фрейма данных после его создания.

Мы создадим DataFrame с помощью out.csv , который имеет следующее содержимое:

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

Следовательно, мы будем указывать игнорировать строку заголовка при создании вашего фрейма данных и указывать имена столбцов в списке, который передается в аргумент names :

Другой способ сделать это-указать имена столбцов в простом старом конструкторе DataFrame () .

Единственное отличие состоит в том, что теперь параметр, принимающий список имен столбцов, называется column вместо names :

Это приводит к другому фрейму данных :

Вывод

В этой статье мы быстро рассмотрели, как мы можем называть и переименовывать столбцы в DataFrame s. Либо назначая имена при построении экземпляра DataFrame , либо переименовывая их после факта с помощью метода rename () .

Источник

Переименование столбцов в пандах

У меня есть DataFrame, использующий панды и метки столбцов, которые мне нужно отредактировать, чтобы заменить оригинальные метки столбцов.

Я хотел бы изменить имена столбцов в DataFrame A , где исходные имена столбцов:

У меня есть отредактированные имена столбцов, которые хранятся в списке, но я не знаю, как заменить имена столбцов.

21 ответ

Просто назначьте его атрибуту .columns :

Другой вариант — переименовать, используя регулярное выражение:

Предполагая, что вы можете использовать регулярное выражение. Это решение устраняет необходимость ручного кодирования с использованием регулярных выражений

Панды 0.21+ Ответ

Произошли некоторые существенные обновления переименования столбцов в версии 0.21.

  • << Метод X0>> добавил параметр axis , который может быть установлен в columns или 1 . Это обновление делает этот метод соответствующим остальному API панд. У него все еще есть параметры index и columns , но вы больше не обязаны их использовать.
  • <> метод с inplace установленным в False позволяет переименовывать все метки индекса или столбца в виде списка.

Примеры для панд 0.21+

Построить образец DataFrame:

Использование rename с axis=’columns’ или axis=1

Оба приводят к следующему:

Еще можно использовать сигнатуру старого метода:

Функция rename также принимает функции, которые будут применяться к каждому имени столбца.

Использование set_axis со списком и inplace=False

Вы можете предоставить список методу set_axis , длина которого равна числу столбцов (или индекса). В настоящее время inplace по умолчанию равен True , но inplace будет по умолчанию False в будущих выпусках.

Почему бы не использовать df.columns = [‘a’, ‘b’, ‘c’, ‘d’, ‘e’] ?

Нет ничего плохого в том, чтобы напрямую присваивать столбцы. Это совершенно хорошее решение.

Преимущество использования set_axis состоит в том, что он может использоваться как часть цепочки методов и возвращает новую копию DataFrame. Без него вам пришлось бы сохранить промежуточные шаги цепочки в другой переменной перед переназначением столбцов.

Если у вас есть датафрейм, df.columns выводит все в список, которым вы можете манипулировать, а затем переназначать в ваш фрейм данных как имена столбцов .

Лучший способ? ИДК . Способ — да.

Ниже представлен лучший способ оценки всех основных методов, предложенных в ответах на вопрос, с использованием cProfile для измерения памяти и времени выполнения. У @kadee, @kaitlyn, & @eumiro были функции с самым быстрым временем выполнения — хотя эти функции настолько быстры, что мы сравниваем округление в 0,000 и 0,001 секунды для всех ответов. Мораль: мой ответ выше, скорее всего, не самый лучший.

Если ваш новый список столбцов находится в том же порядке, что и существующие столбцы, назначение простое:

Если бы у вас был словарь, связанный со старыми именами столбцов и новыми именами столбцов, вы могли бы сделать следующее:

Если у вас нет списка или словаря, вы можете удалить начальный символ $ с помощью понимания списка:

Я знаю этот вопрос и ответ был разжеван до смерти. Но я обратился к нему за вдохновением для решения одной из моих проблем. Я был в состоянии решить это, используя кусочки от разных ответов, поэтому предоставил свой ответ на случай, если кому-то это понадобится.

Мой метод является общим, в котором вы можете добавить дополнительные разделители, разделяя запятую delimiters= запятой и сохраняя ее в будущем.

Источник

Оцените статью