Майкл Маколей

Должен знать функции Pandas для путешествия по машинному обучению

Исходный узел: 1865356

Эта статья была опубликована в рамках Блогатон по Data Science

Введение

Ну, есть хорошая возможность, вы можете!

Для специалистов по данным, которые используют Python в качестве основного языка программирования, пакет Pandas является обязательным инструментом анализа данных. В пакете Pandas есть все, что нужно исследователю данных, и каждый курс сначала учил нас, как его использовать. Он такой большой, мощный и выполняет почти все манипуляции с таблицами, которые вы только можете себе представить. Тем не менее, эта широта иногда может быть недостатком.

У него много красивых функций, которые решают редкие пограничные случаи, разные сценарии.

Одним из ключевых недостатков pandas является то, что он борется с большими наборами данных, потому что pandas хранит свои структуры данных в оперативной памяти, которой может стать недостаточно по мере роста размеров данных. Используйте для этого PySpark или Dask.

Несмотря на то, что пакет Pandas широко используется, все еще есть много функций, которые люди могут упустить из виду, потому что они используются реже или потому, что они не знают о его существовании. Этот пост призван повторно познакомить вас с этими функциями и продемонстрировать, что Pandas гораздо более компетентен, чем вы думали ранее.

Pipe

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

Например, если вам нравится применять такие функции, как drop_duplicates, encode_categoricals, remove_outliers, которые принимают его аргументы.

df_cleaned = (diamonds.pipe(drop_duplicates).pipe(remove_outliers, ['цена', 'карат', 'глубина']). pipe(encode_categoricals, ['огранка', 'цвет', 'чистота'])) )

Факторизовать

Эта функция является альтернативой Sklearns Label Encoder.

# Обратите внимание на [0] в конце. 0 5 52103 2 Имя: cut_enc, dtype: int39813

Результатом факторизации является кортеж значений: закодированное значение и список уникальных категорий.

значения, уникальные = pd.factorize(алмазы["огранка"], sort=True) >>> values[:10] array([0, 1, 3, 1, 3, 2, 2, 2, 4, 2] , dtype=int64) >>> уникальный ['Идеально', 'Премиум', 'Очень хорошо', 'Хорошо', 'Удовлетворительно']

Взорваться

Взорвать | панды функции

Фото Эдеваа Фостер on Unsplash

Explode — функция с интересным названием. Давайте начнем с примера, а затем объяснения:

df = pd.Series([1, 6, 7, [46, 56, 49], 45, [15, 10, 12]]).to_frame("грязный") >>> df
данные | панды функции
Изображение автора

Столбец характеристик имеет две строки, обозначенные списками. Этот тип данных доступен в опросах, где несколько вопросов допускают несколько вариантов ответа.

>>> df.explode("грязный", ignore_index=True)
данные взрываются
Изображение автора

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

от

Для логического индексирования числовых функций в диапазоне есть удобная функция:

# Получите бриллианты по цене от 3500 до 3700 долларов.
между данными | панды функции
Изображение автора

 

T

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

>>> boston.describe().T.head(10)
транспонировать
Изображение автора

 

Параметры панд

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

>>> dir(pd.options) ['вычисление', 'отображение', 'ввод-вывод', 'режим', 'график']

Он состоит из 5 модулей. Давайте посмотрим доступные опции под дисплеем. Доступно много вариантов, но я в основном использую max_columns.

>>> dir(pd.options.display) ['chop_threshold', 'max_columns', 'max_colwidth', 'max_info_columns', 'max_info_rows', 'max_rows', ... 'precision', 'show_dimensions', 'unicode' , 'ширина']

Большинство людей используют max_columns и точность

# Убираем ограничение на отображение количества столбцов pd.options.display.max_columns = None # Показываем только 5 чисел после запятой pd.options.display.precision = 5 # избавляемся от экспоненциального представления

Convert_dtypes

Мы все знаем, что панды имеют раздражающую привычку помечать некоторые столбцы как типы данных объекта. Вместо того, чтобы определять их типы напрямую, вы можете использовать метод convert dtypes, который пытается определить лучший тип данных:

sample = pd.read_csv("data/station_day.csv",usecols=["StationId", "CO", "O3", "AQI_Bucket"]) >>> sample.dtypes Объект StationId CO float64 O3 float64 Объект AQI_Bucket dtype: object >>> sample.convert_dtypes().dtypes StationId string CO float64 O3 float64 AQI_Bucket string dtype: object

Select_dtypes

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

Выбирайте только числовые столбцы с np.number, например:

# Выбираем только числовые столбцы diamonds.select_dtypes(include=np.number).head()
выберите типы
Изображение автора

 

Маска

Эта функция помогает заменить значения, если пользовательское условие не выполняется.

# Создаем образцы данных ages = pd.Series([55, 52, 50, 66, 57, 59, 49, 60]).to_frame("ages") ages
маска | данные
Изображение автора

После выполнения вышеуказанной операции.

маскирование выполнено
Изображение автора

Мин и Макс

Хотя min и max хорошо известны, они обладают лучшими свойствами для некоторых пограничных случаев.

index = ["Бриллианты", "Титаник", "Ирис", "Болезнь сердца", "Дефолт по кредиту"] библиотеки = ["XGBoost", "CatBoost", "LightGBM", "Sklearn GB"] df = pd.DataFrame ( {lib: np.random.uniform(90, 100, 5) для lib в библиотеках}, index=index ) >>> df
мин и макс
Изображение по автору 

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

>>> df.max(axis=1) Diamonds 99.52684 Titanic 99.63650 Iris 99.10989 Болезнь сердца 99.31627 Дефолт по кредиту 97.96728 dtype: float64

Самый большой и самый маленький

nlargest и nsmalest полезны для просмотра первых N или ~(верхних N) значений переменной.

diamonds.nlargest(5, "цена")
самый большой и самый маленький
Изображение автора
бриллианты.nsmalest(5, "цена")
наименьший
Изображение автора

 

Idxmax и Idxмин

Панды возвращают наибольшее/наименьшее число, когда вы вызываете max или min для столбца. Однако бывают ситуации, когда вам нужно положение мин/макс, которое эти функции не предоставляют.

Вместо этого вы можете использовать idxmax/idxmin:

>>> diamonds.price.idxmax() 27749 >>> diamonds.carat.idxmin() 14

Value_Counts

Обычный способ найти процент пропущенных значений — объединить isnull, суммировать и разделить на размер массива.

Но value_counts с соответствующими аргументами делает то же самое:

жилье = pd.read_csv("train.csv") >>> жилье["FireplaceQu"].value_counts(dropna=False, normalize=True) NaN 0.47260 Gd 0.26027 TA 0.21438 Fa 0.02260 Ex 0.01644 Po 0.01370 Имя: FireplaceQu, dtype: поплавок64

клипы

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

>>> возраст.клип(50, 60)
данные для клипа
Изображение автора

 

В_время и между_время

Эти функции полезны при работе с временными рядами высокой детализации.

at_time помогает получить значения на определенную дату или время.

index = pd.date_range("2021-08-01", Periods=100, freq="H") df = pd.DataFrame({"col": list(range(100))}, index=index) >> > дф.голова()
пример в_время | панды функции
Изображение автора

>>> df.at_time("15:00")

.в_время | панды функции
Изображение автора

between_time используется для выборки строк в пределах пользовательского диапазона.

из даты и времени импортировать дату и время >>> df.between_time ("09:45", "12:00")
между_временем
Изображение автора

 

Диапазон_даты

Эта функция помогает создавать индексы временных рядов с периодичностью рабочих дней. Финансовый мир имеет такую ​​частоту. Таким образом, эта функция может быть полезна во время переиндексации временных рядов с помощью функции переиндексации.

series = pd.bdate_range("2021-01-01", "2021-01-31") # Период в один месяц >>> len(series) 21

Ат и Иат

Эти два метода доступа значительно быстрее, чем loc и iloc. Однако у них есть недостаток. Они позволяют выбирать или заменять только одно значение за раз:

# [индекс, метка] >>> diamonds.at[234, "огранка"] 'Идеал' # [индекс, индекс] >>> diamonds.iat[1564, 4] 61.2 # Заменить 16541-ю строку столбца цены >> > алмазы.ат[16541, "цена"] = 10000

Аргсорт

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

tip.reset_index(inplace=True, drop=True) sort_idx = tip["total_bill"].argsort(kind="mergesort") # Теперь отсортируйте `чаевые` на основе total_bill tip.iloc[sort_idx].head()
arg_sort
Изображение автора

 

Аксессуар для кошек

Панды позволяют использовать встроенные функции Python для дат и строк, используя такие методы доступа, как str или dt.

>>> diamonds.dtypes карат float64 категория огранки категория цвета категория чистоты глубина float64 таблица float64 цена int64 x float64 y float64 z float64 cut_enc int64 dtype: object

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

бриллианты["new_cuts"] = бриллианты["огранка"].cat.rename_categories(list("ABCDE")) >>> бриллианты["new_cuts"].cat.categories Index(['A', 'B', ' C', 'D', 'E'], dtype='объект')

Проверьте это для получения более подробного списка функций в разделе кошачий аксессуар.

выжимать

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

Когда одно значение возвращается из условия, используемого для подмножества DataFrame, это один из таких случаев. Рассмотрим следующий сценарий:

подмножество = diamonds.loc[diamonds.index >> подмножество
цена

Даже если есть только одна ячейка, верните DataFrame. Это неудобно, так как теперь вы должны использовать.loc и с именем столбца, и с индексом, чтобы получить цену.

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

>>> subset.squeeze() 326

Можно указать ось для удаления. Теперь он возвращал только скаляр.

>>> subset.squeeze("columns") # or "rows" 0 326 Name: price, dtype: int64

Обратите внимание, что эта функция работает только для Series или DataFrame с одиночными значениями.

Excel_writer

Это универсальный класс для создания файлов Excel и записи в нем DataFrame. Учтите, у нас есть эти два набора данных.

# Загрузить два набора данных diamonds = sns.load_dataset("diamonds") tip = sns.load_dataset("tips") # Записать в тот же файл excel с помощью pd.ExcelWriter("data/data.xlsx") в качестве средства записи: diamonds.to_excel (писатель, имя_листа = "алмазы") tip.to_excel (писатель, имя_листа = "советы")

У него есть свойства, чтобы указать используемый формат DateTime, нужен ли вам новый файл или изменить существующий, что произойдет, если лист существует. Проверь это документации Больше подробностей.

Заключение

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

Библиотеки, такие как Dask и datatable, постепенно вытесняют Pandas с их яркими новыми функциями для обработки больших наборов данных. Pandas остается наиболее широко используемым инструментом обработки данных в сообществе специалистов по данным Python. Из-за того, насколько хорошо она вписывается в существующий стек SciPy, библиотека служит парадигмой для других пакетов, которым нужно следовать и создавать.

Я надеюсь, что вы нашли этот пост проницательным, и спасибо за чтение.

Медиа, показанные в этой статье, не принадлежат Analytics Vidhya и используются по усмотрению автора.

Источник: https://www.analyticsvidhya.com/blog/2021/08/must-know-pandas-functions-for-machine-learning-journey/

Отметка времени:

Больше от Аналитика Видхья