- Удалить все повторяющиеся строки в Python Pandas
- Трансформация данных в pandas ч.1 / pd 11
- Удаление повторов
- Маппинг
- Замена значений с помощью маппинга
- Добавление значений с помощью маппинга
- Переименование индексов осей
- Дискретизация и биннинг
- Определение и фильтрация лишних данных
- Перестановка
- Случайная выборка
- Выявление и фильтрация дубликатов с Pandas
- Удалите все повторяющиеся строки в Python Pandas
- 5 ответов
- python pandas remove duplicate columns
- 14 Answers 14
Удалить все повторяющиеся строки в Python Pandas
pandas drop_duplicates Функция отлично подходит для «uniquifying» в dataframe. Тем не менее, одним из ключевых аргументов для передачи является take_last=True или take_last=False , хотя я хотел бы отбросить все строки, которые являются дубликатами, в подмножестве столбцов. Это возможно?
В качестве примера я хотел бы удалить строки, которые совпадают в столбцах, A и C поэтому следует удалить строки 0 и 1.
Теперь это намного проще в пандах с помощью drop_duplicates и параметра keep.
Просто хочу добавить ответ Бена на drop_duplicates :
первый: отбросьте дубликаты за исключением первого вхождения.
последний: удалить дубликаты, кроме последнего вхождения.
False: удалить все дубликаты.
Таким образом, установка keep False даст вам желаемый ответ.
DataFrame.drop_duplicates (* args, ** kwargs) Возвращает DataFrame с удаленными дублирующимися строками, опционально только с учетом определенных столбцов
Параметры: subset: метка столбца или последовательность меток, необязательно. Учитывайте только определенные столбцы для определения дубликатов. По умолчанию используются все столбцы keep: <'first', 'last', False>, по умолчанию ‘first’ first: Удалить дубликаты, кроме за первое вхождение. последний: удалить дубликаты, кроме последнего вхождения. False: удалить все дубликаты. take_last: устарел inplace: логический, по умолчанию False Отбрасывать дубликаты на месте или возвращать копию cols: аргумент только для kwargs подмножества [устарел] Возвраты: дедуплицированный: DataFrame
Источник
Трансформация данных в 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 выдает положительное значение, и удалив их из таблицы по номерам:
Источник
Удалите все повторяющиеся строки в 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 : Таблицы данных
Источник
python pandas remove duplicate columns
What is the easiest way to remove duplicate columns from a dataframe?
I am reading a text file that has duplicate columns via:
The column names are:
All the Time and Time Relative columns contain the same data. I want:
All my attempts at dropping, deleting, etc such as:
Result in uniquely valued index errors:
Sorry for being a Pandas noob. Any Suggestions would be appreciated.
Additional Details
Pandas version: 0.9.0
Python Version: 2.7.3
Windows 7
(installed via Pythonxy 2.7.3.0)
data file (note: in the real file, columns are separated by tabs, here they are separated by 4 spaces):
14 Answers 14
Here’s a one line solution to remove columns based on duplicate column names:
How it works:
Suppose the columns of the data frame are [‘alpha’,’beta’,’alpha’]
df.columns.duplicated() returns a boolean array: a True or False for each column. If it is False then the column name is unique up to that point, if it is True then the column name is duplicated earlier. For example, using the given example, the returned value would be [False,False,True] .
Pandas allows one to index using boolean values whereby it selects only the True values. Since we want to keep the unduplicated columns, we need the above boolean array to be flipped (ie [True, True, False] =
Finally, df.loc[:,[True,True,False]] selects only the non-duplicated columns using the aforementioned indexing capability.
Note: the above only checks columns names, not column values.
Источник