- Удалите все повторяющиеся строки в Python Pandas
- 5 ответов
- Трансформация данных в pandas ч.1 / pd 11
- Удаление повторов
- Маппинг
- Замена значений с помощью маппинга
- Добавление значений с помощью маппинга
- Переименование индексов осей
- Дискретизация и биннинг
- Определение и фильтрация лишних данных
- Перестановка
- Случайная выборка
- Выявление и фильтрация дубликатов с Pandas
- Как удалить повторяющиеся строки в Pandas Python
- Выявление дубликатов в Pandas Python
- Способ 1:
- Способ 2:
- Удаление дубликатов в Pandas Python
- Удалите дубликаты, сохранив только первое вхождение
- Пример
- Удалите дубликаты, сохранив только последнее вхождение
- Пример
- Удалить все повторяющиеся строки
- Удалить связанные дубликаты из указанного столбца
- Пример
- Вывод
Удалите все повторяющиеся строки в 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() .
У каждого класса есть нижний предел с круглой скобкой и верхний — с квадратной. Такая запись соответствует математической, используемой для записи интервалов. Если скобка квадратная, то число лежит в диапазоне, а если круглая — то нет.
Бинам можно задавать имена, передав их в массив строк, а затем присвоив его параметру 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.
Источник