- Трансформация данных в pandas ч.1 / pd 11
- Удаление повторов
- Маппинг
- Замена значений с помощью маппинга
- Добавление значений с помощью маппинга
- Переименование индексов осей
- Дискретизация и биннинг
- Определение и фильтрация лишних данных
- Перестановка
- Случайная выборка
- Как переименовать столбец Pandas DataFrame в Python
- Вступление
- Переименование столбцов существующего фрейма данных
- Назначение имен столбцов При создании фрейма данных
- Вывод
- Переименование столбцов в пандах
- 21 ответ
- Панды 0.21+ Ответ
- Примеры для панд 0.21+
- Использование rename с axis=’columns’ или axis=1
- Использование set_axis со списком и inplace=False
- Почему бы не использовать df.columns = [‘a’, ‘b’, ‘c’, ‘d’, ‘e’] ?
Трансформация данных в 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 .
Существует два варианта манипулирования именами столбцов фрейма данных :
- Переименование столбцов существующего фрейма данных
- Назначение пользовательских имен столбцов при создании нового фрейма данных
Давайте рассмотрим оба метода.
Переименование столбцов существующего фрейма данных
У нас есть образец DataFrame ниже:
Фрейм данных |/df выглядит следующим образом:
Чтобы переименовать столбцы этого DataFrame , мы можем использовать метод rename () , который принимает:
- Словарь в качестве аргумента columns , содержащий сопоставление исходных имен столбцов с новыми именами столбцов в виде пар ключ-значение
- 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= запятой и сохраняя ее в будущем.
Источник