Меню

Pandas вывести дубликаты строк

Удалите все повторяющиеся строки в Python Pandas

на pandas drop_duplicates функция отлично подходит для» uniquifying » фрейма данных. Однако одним из аргументов ключевого слова для передачи является take_last=True или take_last=False , в то время как я хотел бы удалить все строки, которые дублируются через подмножество столбцов. Возможно ли это?

в качестве примера я хотел бы удалить строки, которые соответствуют столбцам A и C таким образом, это должно отбросить строки 0 и 1.

5 ответов

Это намного проще в панд теперь с drop_duplicates и параметр keep.

просто хочу добавить к ответу Бена на drop_duplicates:

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

last: удаление дубликатов, за исключением последнего вхождения.

False: отбросьте все дубликаты.

поэтому ставим keep в False мы даем вам желаемое ответ.

таблицы данных.drop_duplicates (*args, **kwargs) возвращает фрейм данных с дубликаты строк удалены, необязательно только с учетом определенных столбцов

параметры: подмножество: метка столбца или последовательность меток, опционные По умолчанию для идентификации дубликатов учитываются только определенные столбцы используйте все столбцы keep: <‘first’,’ last', False>, по умолчанию ’ first ‘ first: удаление дубликатов, за исключением первого вхождения. последний : Удаление дубликатов, за исключением для последнего случая. False: отбросить все дубликаты. take_last : устарел inplace : boolean, значение по умолчанию False Удалять ли дубликаты на месте или возвращать копии cols : kwargs возвращает только аргумент subset [deprecated]: deduplicated : Таблицы данных

Источник

Трансформация данных в 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() .

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

Читайте также:  Вывести диагональ матрицы numpy

Бинам можно задавать имена, передав их в массив строк, а затем присвоив его параметру 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

Рассмотрим задачу выявления и удаления дублирующих значений в массивах информации с библиотекой Pandas. В демонстрационных целях будем использовать набор объявлений о продажах квартир в Республике Северная Осетия-Алания, имеющий следующий вид:

Для определения дублирующих данных можно воспользоваться методом duplicated , в котором при желании задается подмножество столбцов, одинаковые значения в которых являются признаком дубликата (параметр subset, по умолчанию равен None — все столбцы), а также стратегию пометки строк как дубликата (параметр keep , только первое вхождение не помечается как дубликат — по умолчанию, только последнее значение не помечается как дубликат, все повторяющиеся значения помечаются как дубликаты). Продемонстрируем работу метода на заданном наборе столбцов и со стратегией пометки всех дублирующих значений:

Читайте также:  Как стирать шерстяное пальто с подкладкой

Чтобы получить соответствующие значения столбцов достаточно проиндексировать таблицу объектом Series, полученным на предыдущем шаге:

Для удаления повторяющихся значений в pandas предназначен метод drop_duplicates , который в числе прочих имеет такие же, как и duplicated параметры. Продемонстрируем его применение на практике:

То есть данный метод удалит все строки, которые имеют одинаковые значения в заданных столбцах. Это можно проверить альтернативным способом, получив индексы строк таблицы, для которых duplicated выдает положительное значение, и удалив их из таблицы по номерам:

Источник

Как удалить повторяющиеся строки в Pandas Python

Главное меню » Программирование » Python » Как удалить повторяющиеся строки в Pandas Python

В этой статье мы взяли набор данных, который доступен в формате файла .csv. Мы прочитаем файл .csv, чтобы показать исходное содержимое этого файла, как показано ниже:

Выявление дубликатов в Pandas Python

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

Способ 1:

Прочтите файл csv и передайте его во фрейм данных. Затем определите повторяющиеся строки с помощью функции duplicated(). Наконец, используйте оператор печати для отображения повторяющихся строк.

Способ 2:

Используя этот метод, столбец is_duplicated будет добавлен в конец таблицы и помечен как «True» в случае дублирования строк.

Удаление дубликатов в Pandas Python

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

Три вышеуказанных параметра являются необязательными и более подробно описаны ниже:

  • keep: этот параметр имеет три разные значения: First, Last и False. Значение First сохраняет первое вхождение и удаляет последующие дубликаты, значение Last сохраняет только последнее вхождение и удаляет все предыдущие дубликаты, а значение False удаляет все повторяющиеся строки.
  • subset: метка, используемая для идентификации повторяющихся строк
  • inplace: содержит два условия: True и False. Этот параметр удалит повторяющиеся строки, если для него установлено значение True.

Удалите дубликаты, сохранив только первое вхождение

Когда вы используете «keep = first», будет сохранено только первое вхождение строки, а все остальные дубликаты будут удалены.

Пример

В этом примере будет сохранена только первая строка, а остальные дубликаты будут удалены:

Сохраненное вхождение первой строки выделено красным, а остальные дубликаты удалены.

Удалите дубликаты, сохранив только последнее вхождение

Когда вы используете «keep = last», все повторяющиеся строки, кроме последнего вхождения, будут удалены.

Пример

В следующем примере удаляются все повторяющиеся строки, кроме последнего вхождения.

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

Удалить все повторяющиеся строки

Чтобы удалить все повторяющиеся строки из таблицы, установите «keep = False» следующим образом:

Как вы можете видеть на следующем изображении, все дубликаты удалены из фрейма данных:

Удалить связанные дубликаты из указанного столбца

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

Пример

В следующем примере все связанные дубли удаляются из столбца «Состояния».

Вывод

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

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.

Источник