Pandas как округлить значения в столбце
Перейти к содержимому

Pandas как округлить значения в столбце

  • автор:

Метод round() объектов Series/DataFrame в pandas

Округляет Series/DataFrame до определенного количества десятичных знаков

Синтаксис:

DataFrame.round(decimals=0, *args, **kwargs) Series.round(decimals=0, *args, **kwargs) 

Параметры:

  • decimals=0 — количество десятичных знаков, до которого нужно округлить каждый столбец. Если задано целое число, округляет каждый столбец до одинакового количества знаков. В противном случае dict или Series округляются до соответствующего количества знаков. Любые столбцы, не содержащие десятичных знаков, останутся без изменений. Элементы десятичных дробей, которые не являются столбцами входных данных, будут игнорироваться. Аргумент принимает:
    • для DataFrame — int , dict , Series :
      • в случае dict — имена столбцов должны быть в ключами.
      • в случае Series — имена столбцов должны быть индексами..

      Описание:

      Методы DataFrame.round() и Series.round() модуля pandas округляют Series / DataFrame до определенного количества десятичных знаков.

      Примеры использования для DataFrame :

      >>> import pandas as pd df = pd.DataFrame([(.21, .32), (.01, .67), (.66, .03), (.21, .18)], columns=['dogs', 'cats']) >>> df # dogs cats # 0 0.21 0.32 # 1 0.01 0.67 # 2 0.66 0.03 # 3 0.21 0.18 

      Целое число int , каждый столбец округляется до одинакового количества десятичных знаков.

      >>> df.round(1) # dogs cats # 0 0.2 0.3 # 1 0.0 0.7 # 2 0.7 0.0 # 3 0.2 0.2 

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

      >>> decimals = 'dogs': 1, 'cats': 0> >>> df.round(decimals) # dogs cats # 0 0.2 0.0 # 1 0.0 1.0 # 2 0.7 0.0 # 3 0.2 0.0 

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

      >>> decimals = pd.Series([0, 1], index=['cats', 'dogs']) >>> df.round(decimals) # dogs cats # 0 0.2 0.0 # 1 0.0 1.0 # 2 0.7 0.0 # 3 0.2 0.0 

      Примеры использования для Series :

      >>> s = pd.Series([0.1, 1.3, 2.7]) >>> s.round() # 0 0.0 # 1 1.0 # 2 3.0 # dtype: float64 
      • КРАТКИЙ ОБЗОР МАТЕРИАЛА.
      • Объект DataFrame модуля pandas
      • Объект Series модуля pandas
      • Объект Index модуля pandas
      • Объект MultiIndex модуля pandas
      • Логическая индексация в pandas
      • Использование регулярных выражений в Pandas
      • Отбор и фильтрация данных в Pandas
      • Методы итерации по объектам pandas
      • Анализ логов Nginx модулем pandas
      • Сравнение pandas с SQL
      • Свойства .loc[], .iloc[] объектов Series/DataFrame в pandas
      • Метод .truncate() объектов Series/DataFrame в pandas
      • Метод .take() объектов DataFrame/Series/Index в pandas
      • Метод Series.between() модуля pandas
      • Метод .between_time() объектов DataFrame/Series в pandas
      • Методы pandas для работы с None и NaN в DataFrame/Series
      • Метод .interpolate() объектов Series/DataFrame в pandas
      • Методы .duplicated() и .drop_duplicates() объектов DataFrame/Series в pandas
      • Метод .sort_values() и .sort_index() объектов Series/DataFrame в pandas
      • Метод .value_counts() объектов DataFrame/Series в pandas
      • Методы .nsmallest() и .nlargest() объектов Series/DataFrame в pandas
      • Метод DataFrame.query() модуля pandas
      • Методы .apply() и .map() объектов DataFrame/Series в pandas
      • Метод .isin() объектов DataFrame/Series в pandas
      • Метод DataFrame.assign() модуля pandas
      • Метод DataFrame.insert() модуля pandas
      • Методы .mask() и .where() объектов Series/DataFrame в pandas
      • Метод .groupby() объектов DataFrame/Series в pandas
      • Класс Grouper() модуля pandas
      • Метод .transform() объектов DataFrame/DataFrameGroupBy в pandas
      • Метод .aggregate() объектов Series/DataFrame в pandas
      • Метод DataFrame.join() в pandas, объединение DataFrame
      • Метод DataFrame.merge() в pandas, слияние в стиле БД
      • Функция concat() библиотеки pandas
      • Метод DataFrame.set_index() в pandas
      • Методы .all() и .any() объектов Series/DataFrame в pandas
      • Метод .resample() объектов Series/DataFrame в pandas
      • Метод .reindex() объектов Series/DataFrame в pandas
      • Метод .drop() объектов Series/DataFrame в pandas
      • Метод DataFrame.set_axis() в pandas
      • Методы .rename() и .rename_axis() объектов Series/DataFrame в pandas
      • Метод .reset_index() объектов Series/DataFrame в pandas
      • Универсальный метод .replace() объектов Series/DataFrame в pandas
      • Методы строк объектов Series/Index в pandas, объект Series.str
      • Доступ к методам datetime объектов Series/index в pandas
      • Псевдонимы периодов временных рядов pandas
      • Методы pivot() и pivot_table() объекта DataFrame в pandas
      • Методы .stack() и .unstack() объекта DataFrame в pandas
      • Функция melt() и wide_to_long() модуля pandas
      • Функция get_dummies() и from_dummies() модуля pandas
      • Метод .explode() объектов Series/DataFrame в pandas
      • Функция crosstab() модуля pandas
      • Функция factorize() модуля pandas
      • Функция cut() модуля pandas, интервалы для группировки
      • Метод DataFrame.rolling() модуля pandas
      • Метод DataFrame.expanding() модуля pandas
      • Объекты Timestamp и DatetimeIndex в pandas
      • Функция to_datetime() модуля pandas
      • Функция date_range() модуля pandas
      • Объекты Categorical и CategoricalIndex модуля pandas
      • Объекты Interval и IntervalIndex модуля pandas
      • Функция interval_range() модуля pandas
      • Объекты Period и PeriodIndex модуля pandas
      • Метод to_period() объектов DatetimeIndex/DataFrame/Series в pandas
      • Функция period_range() модуля pandas
      • Объект RangeIndex модуля pandas
      • Функция read_csv() модуля pandas
      • Создание DataFrame из нескольких файлов CSV в pandas
      • Чтение файлов со столбцами фиксированной ширины в pandas
      • Метод DataFrame.to_csv() модуля pandas
      • Функция read_excel() модуля pandas
      • Метод DataFrame.to_excel() модуля pandas
      • Функция read_sql() модуля pandas
      • Метод DataFrame.to_sql() модуля pandas
      • Примеры групповых операций в pandas со StackOverflow
      • Метод round() объектов Series/DataFrame в pandas
      • Функция to_numeric() модуля pandas
      • Метод .compare() объектов Series/DataFrame в pandas
      • Метод .align() объектов Series/DataFrame в pandas
      • Polars быстрая библиотека DataFrame для Python
      • Пакет FireDucks, быстрый и полностью совместимый с API pandas

      Округление столбца pandas с до целого сохранением суммы

      Вопрос не совсем однозначный, но могу предложить просто раскидать по единичке всю разницу между округлением и исходной суммой. На примере 50 значений по 0.1:

      import pandas as pd # Подготовка и проверка данных df = pd.DataFrame() sum_float = df['num'].sum() print(f'Сумма float: ') df['num'] = df['num'].astype(int) sum_int = df['num'].sum() print(f'Сумма int: ') # Здесь кидаем по единичке в столько элементов, сколько у нас разница ones_num = int(round(sum_float - sum_int)) df.iloc[:ones_num, 0] += 1 # Проверяем sum_int = df['num'].sum() print(f'Исправленная сумма int: ') 
      Сумма float: 5 Сумма int: 0 Исправленная сумма int: 5 

      10 приемов Python Pandas, которые сделают вашу работу более эффективной

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

      read_csv

      Все знают эту команду. Но если данные, которые вы пытаетесь прочитать, слишком большие, попробуйте добавить команду nrows = 5 , чтобы прочитать сначала небольшую часть данных перед загрузкой всей таблицы. В этом случае вам удастся избежать ситуации выбора неверного разделителя (не всегда в данных есть разделение в виде запятой).

      (Или вы можете использовать команду ‘head’ в linux для проверки первых 5 строк в любом текстовом файле: head -c 5 data.txt )

      Затем вы можете извлечь список столбцов, используя df.columns.tolist() , а затем добавить команду usecols = [‘c1’, ‘c2’,…], чтобы извлечь только нужные вам столбцы. Кроме того, если вы знаете типы данных определенных столбцов, вы можете добавить dtype = для более быстрой загрузки. Еще одно преимущество этой команды в том, что если у вас есть столбец, который содержит как строки, так и числа, рекомендуется объявить его тип строковым, чтобы не возникало ошибок при попытке объединить таблицы, используя этот столбец в качестве ключа.

      select_dtypes

      Если предварительная обработка данных должна выполняться в Python, то эта команда сэкономит ваше время. После чтения из таблицы типами данных по умолчанию для каждого столбца могут быть bool, int64, float64, object, category, timedelta64 или datetime64. Вы можете сначала проверить распределение с помощью

      df.dtypes.value_counts()

      чтобы узнать все возможные типы данных вашего фрейма, затем используйте

      df.select_dtypes(include=[‘float64’, ‘int64’])

      чтобы выбрать субфрейм только с числовыми характеристиками.

      сopy

      Это важная команда. Если вы сделаете:

      import pandas as pd
      df1 = pd.DataFrame(< ‘a’:[0,0,0], ‘b’: [1,1,1]>)
      df2 = df1
      df2[‘a’] = df2[‘a’] + 1
      df1.head()

      Вы обнаружите, что df1 изменен. Это потому, что df2 = df1 не делает копию df1 и присваивает ее df2, а устанавливает указатель, указывающий на df1. Таким образом, любые изменения в df2 приведут к изменениям в df1. Чтобы это исправить, вы можете сделать либо:

      df2 = df1.copy ()
      from copy import deepcopy
      df2 = deepcopy(df1)

      map

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

      level_map = 
      df[‘c_level’] = df[‘c’].map(level_map)

      Например: True, False до 1, 0 (для моделирования); определение уровней; определяемые пользователем лексические кодировки.

      apply or not apply?

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

      def rule(x, y): 
      if x == ‘high’ and y > 10:
      return 1
      else:
      return 0

      df = pd.DataFrame(< 'c1':[ 'high' ,'high', 'low', 'low'], 'c2': [0, 23, 17, 4]>)
      df['new'] = df.apply(lambda x: rule(x['c1'], x['c2']), axis = 1)
      df.head()

      В приведенных выше кодах мы определяем функцию с двумя входными переменными и используем функцию apply, чтобы применить ее к столбцам ‘c1’ и ‘c2’.

      но проблема «apply» заключается в том, что иногда она занимает очень много времени.

      Скажем, если вы хотите рассчитать максимум из двух столбцов «c1» и «c2», конечно, вы можете применить данную команду

      df[‘maximum’] = df.apply(lambda x: max(x[‘c1’], x[‘c2’]), axis = 1)

      но это будет медленнее, нежели:

      df[‘maximum’] = df[[‘c1’,’c2']].max(axis =1)

      Вывод: не используйте команду apply, если вы можете выполнить ту же работу используя другие функции (они часто быстрее). Например, если вы хотите округлить столбец ‘c’ до целых чисел, выполните округление (df [‘c’], 0) вместо использования функции apply.

      value counts

      Это команда для проверки распределения значений. Например, если вы хотите проверить возможные значения и частоту для каждого отдельного значения в столбце «c», вы можете применить

      df[‘c’].value_counts()

      Есть несколько полезных приемов / функций:
      A. normalize = True : если вы хотите проверить частоту вместо подсчетов.
      B. dropna = False : если вы хотите включить пропущенные значения в статистику.
      C. sort = False : показать статистику, отсортированную по значениям, а не по количеству.

      D. df[‘c].value_counts().reset_index().: если вы хотите преобразовать таблицу статистики в датафрейм Pandas и управлять ими.

      количество пропущенных значений

      При построении моделей может потребоваться исключить строку со слишком большим количеством пропущенных значений / строки со всеми пропущенными значениями. Вы можете использовать .isnull () и .sum () для подсчета количества пропущенных значений в указанных столбцах.

      import pandas as pd
      import numpy as np

      df = pd.DataFrame(< ‘id’: [1,2,3], ‘c1’:[0,0,np.nan], ‘c2’: [np.nan,1,1]>)
      df = df[[‘id’, ‘c1’, ‘c2’]]
      df[‘num_nulls’] = df[[‘c1’, ‘c2’]].isnull().sum(axis=1)
      df.head()

      выбрать строки с конкретными идентификаторами

      В SQL мы можем сделать это, используя SELECT * FROM… WHERE ID в («A001», «C022»,…), чтобы получить записи с конкретными идентификаторами. Если вы хотите сделать то же самое с pandas, вы можете использовать:

      df_filter = df ['ID']. isin (['A001', 'C022', . ]) 
      df [df_filter]

      Percentile groups

      Допустим, у вас есть столбец с числовыми значениями, и вы хотите классифицировать значения в этом столбце по группам, скажем, топ 5% в группу 1, 5–20% в группу 2, 20–50% в группу 3, нижние 50% в группу 4. Конечно, вы можете сделать это с помощью pandas.cut, но мы бы хотели представить другую функцию:

      import numpy as np
      cut_points = [np.percentile(df[‘c’], i) for i in [50, 80, 95]]
      df[‘group’] = 1
      for i in range(3):
      df[‘group’] = df[‘group’] + (df[‘c’] < cut_points[i])
      # or Которая быстро запускается (не применяется функция apply).

      to_csv

      Опять-таки, это команда, которую используют все. Отметим пару полезных приемов. Первый:
      print(df[:5].to_csv())

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

      Еще один прием касается смешанных вместе целых чисел и пропущенных значений. Если столбец содержит как пропущенные значения, так и целые числа, тип данных по-прежнему будет float, а не int. Когда вы экспортируете таблицу, вы можете добавить float_format = '%. 0f', чтобы округлить все числа типа float до целых чисел. Используйте этот прием, если вам нужны только целочисленные выходные данные для всех столбцов – так вы избавитесь от всех назойливых нулей ‘.0’ .

      10 быстрых трюков Pandas для активизации вашего аналитического проекта

      Pandas - это популярная библиотека анализа данных на Python. Это, безусловно, обеспечивает вам гибкость и инструменты, необходимые для обработки данных.

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

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

      Вот краткий указатель для справки:

      • Регулирование количества столбцов или строк для отображения
      • Произвольная выборка строк с помощью sample()
      • Подмножество фрейма данных с помощью метода query()
      • Округление значений в фрейме данных pandas с помощью функции round()
      • Распаковка значений списка с помощью метода explode()
      • Создание быстрых графиков с помощью метода plot()
      • Возвращение нескольких фреймов данных с display()
      • Подсчет уникальных значений с помощью nunique()
      • Возвращение совокупной сводки с помощью cumsum()
      • Агрегирование по нескольким функциям с помощью agg()

      Для примера мы будем использовать Airbnb Open Data, которыми вы можете воспользоваться бесплатно, поскольку они общедоступны по ODbL Licence.

      Не забудьте взять блокнот Jupyter со всеми примерами в конце этого чтения.

      Задача анализа данных начинается с импорта набора данных в pandas DataFrame, и требуемый набор данных часто доступен в формате .csv.

      Однако, когда вы читаете csv-файл с большим количеством столбцов в фрейме данных pandas, вы можете увидеть только несколько имен столбцов, за которыми следует . . . . . и еще несколько имен столбцов, как показано ниже.

      import pandas as pd df = pd.read_csv("Airbnb_Open_Data.csv") df.head()

      Отображение ограниченного количества столбцов в Jupyter-Notebook

      Основная цель .head() состоит в том, чтобы незаметно заглянуть в данные. С такими скрытыми именами столбцов за . . . . . , вы слепы к данным в этих столбцах. Итак, первый трюк здесь заключается в том, чтобы зафиксировать количество столбцов и строк, которые вы хотели бы отобразить.

      Регулирование количества столбцов или строк для отображения

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

      Вы можете проверить это ограничение самостоятельно, используя параметры отображения pandas, как показано ниже.

      pd.options.display.max_rows #Output 60 pd.options.display.max_columns #Output 20

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

      Например, вы можете установить максимальное количество столбцов равным 30, как показано ниже.

      pd.options.display.max_columns = 30 df = pd.read_csv("Airbnb_Open_Data.csv") df.head()

      Pandas, устанавливающие максимальное количество строк и столбцов

      На рисунке выше вы можете увидеть все столбцы в наборе данных. Столбцы в красном поле ранее были скрыты за . . . . . . и не были видны в выходных данных.

      Кроме того, вы можете вернуть параметру значение по умолчанию, используя функцию .reset_option() , как показано ниже.

      pd.reset_option('display.max_rows') pd.options.display.max_rows #Output 60

      Когда вы изменяете несколько параметров по умолчанию в pandas, вы можете сбросить все параметры обратно к исходным значениям в одном операторе, используя аргумент ‘all’ в функции .reset_options() .

      Чтобы заглянуть в набор данных, вы можете использовать методы .head() или .tail() . Это ограничивает вас возможностью просмотра только первых/последних нескольких строк. В pandas вы всегда можете проверить данные из любой случайно выбранной записи или даже подмножество данных с помощью случайного выбора.

      Случайная выборка строк с помощью sample()

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

      pandas.DataFrame.sample предлагает гибкость для случайного выбора любой записи из набора данных с 7 необязательными и настраиваемыми параметрами.

      Например, предположим, что вы хотели бы выбрать 4 случайные записи из набора данных Airbnb. Вы можете просто ввести — df.sample(4) — чтобы получить приведенный ниже результат.

      Случайный выбор записей из DataFrame

      В качестве альтернативы вы также можете использовать fraction, чтобы указать, какую часть всего набора данных вы хотите выбрать случайным образом. Просто назначьте долю (меньше 1) параметру frac в функции sample() , как показано ниже.

      df.sample(frac = 0.00005)

      Случайная выборка Pandas с использованием fraction

      Здесь вы просто извлекли 0,005% от общего количества строк в DataFrame.

      Однако записи выбираются случайным образом каждый раз, когда вы выполняете эту ячейку. Итак, чтобы получать один и тот же результат каждый раз, вы можете установить параметру random state значение любого целого числа.

      Предположим, вы хотели бы каждый раз извлекать одни и те же три строки, тогда вы можете использовать функцию sample() , как показано ниже.

      df.sample(3, random_state = 4)

      Случайная выборка Pandas каждый раз выдает один и тот же результат

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

      Как только вы проверите данные, доступные в наборе данных, следующей задачей будет выбор требуемого подмножества набора данных. Конечно, вы можете использовать .loc и методы .iloc , за которыми следует ряд квадратных скобок для извлечения выбранных строк и столбцов.

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

      Подмножество фрейма данных с помощью метода query()

      Функция pandas.DataFrame.query(expression) предлагает вам гибкость для условного выбора подмножества фрейма данных. Выражение, предоставляемое в рамках этой функции, представляет собой комбинацию одного или нескольких условий. Вы можете написать это абсолютно простым способом без каких-либо квадратных скобок.

      Например, предположим, что вы хотите извлечь все записи из набора данных, где соседством является Кенсингтон. Используя метод query() , это довольно просто, как показано ниже.

      df.query("neighbourhood == 'Kensington'")

      Подмножество фрейма данных pandas с использованием query()

      Вы также можете использовать несколько условий в одном столбце и любую логику, такую как AND , OR , NOT между ними.

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

      Округление значений в фрейме данных pandas с помощью функции round()

      Иногда числовые данные в столбце содержат несколько цифр после запятой, и лучше ограничить их до 2-3 цифр.

      В таких случаях может очень пригодиться метод pandas.DataFrame.round . Все, что вам нужно сделать, это указать необходимое количество цифр в методе, как показано ниже.

      df.round(2)

      Round фрейма данных до переменного числа знаков после запятой

      В наборе данных Airbnb только столбцы lat и long содержат значения с 5 цифрами после запятой. Метод фрейма данных round() просто округляет количество цифр для всех столбцов в наборе данных.

      Но предположим, вы хотите округлить количество цифр только для одного столбца — lat — в этом наборе данных. Метод pandas.Series.round может быть полезен в таком сценарии, как показано ниже.

      df['lat'].round(2) #Output 0 40.65 1 40.75 2 40.81 . 102596 40.68 102597 40.75 102598 40.77 Name: lat, Length: 102599, dtype: float64

      Вывод pandas.Series.round - это снова серия. Чтобы использовать его как часть того же фрейма данных, вам необходимо повторно назначить измененный столбец исходному столбцу, как показано ниже.

      df['lat'] = df['lat'].round(2) df.head()

      Округлите каждое значение в ряду или столбце до заданного количества десятичных знаков

      Он изменил только значения в столбце lat на 2 цифры после запятой, в то время как значения в столбце long остаются неизменными.

      Продолжая манипулировать данными столбца, давайте рассмотрим другой метод explode() , который имеет более конкретный вариант использования — для преобразования каждого элемента списка значений в отдельную строку.

      Распаковка значений списка с помощью метода explode()

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

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

      df = pd.DataFrame() df

      Образец набора данных

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

      df.explode("State")

      df.explode() в Python

      Все, что вам нужно сделать, это указать имя столбца, содержащего списки, в качестве его значений в explode() . Вы можете заметить, что в приведенном выше выводе он просто воспроизвел значения индекса для каждого элемента в списке.

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

      Когда вы используете pandas для анализа данных, вам не нужно импортировать какую-либо другую библиотеку для создания диаграмм. pandas имеет свои собственные методы и гибкие опции для быстрого создания разнообразных диаграмм.

      Создание быстрых графиков с помощью метода plot()

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

      Предположим, вы хотели бы увидеть среднее количество отзывов для каждого типа номера. Вы можете достичь этого с помощью метода pandas.DataFrame.plot , который создает графики серии или фрейма данных.

      Вы можете создать меньший и более простой фрейм данных — df_room — только с обязательными двумя столбцами, как мы сделали здесь.

      df_room = pd.DataFrame(df.groupby('room type')['number of reviews'].mean()) df_room.reset_index(drop=False, inplace=True) display(df_room) df_room.plot(x='room type', y='number of reviews', kind='bar')

      pandas.DataFrame.plot

      Оба — вновь созданный фрейм данных и диаграмма — отображаются в выходных данных.

      Вы всегда можете изменить тип диаграммы с гистограммы на линейку, используя параметр kind в .plot() .

      Но как pandas создала столбчатую диаграмму без каких-либо данных о стиле диаграммы?

      pandas.DataFrame.plot использует серверную часть, указанную параметром plotting.backend . Серверная часть построения графиков - это библиотека построения графиков, которую pandas использует для создания диаграмм, и она использует matplotlib в качестве библиотеки по умолчанию.

      Вы можете изменить его в любое время, установив pd.options.plotting.backend или используя опцию pd.set_option(‘plotting_backend’, ‘name_of_backend’) .

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

      Возвращение нескольких фреймов данных с помощью display()

      Часто вы создаете несколько фреймов данных, но когда вы упоминаете их имена или используете для них метод .head() / .tail() в одной ячейке, в выходных данных отображается только последний фрейм данных.

      Для примера давайте создадим два фрейма данных и попытаемся просмотреть их в выходных данных.

      df1 = pd.DataFrame() df2 = df1.explode("State") # Get both DataFrames as output df1 df2

      Выход ячейки

      Хотя вы упомянули df1 и df2 в конце своего кода; в выходных данных отображался только df2 .

      Но вы хотите видеть оба фрейма данных, один под другим. Вот где полезна функция display() . Вам нужно только передать фрейм данных функции display() , как показано ниже.

      df1 = pd.DataFrame() df2 = df1.explode("State") # Get both DataFrames as output display(df1) display(df2)

      Display все фреймы данных в выходных данных

      Теперь вы можете видеть оба (или все) DataFrames в выходных данных, расположенных один поверх другого.

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

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

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

      Подсчет уникальных значений с помощью unique()

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

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

      df['room type'].nunique() #Output 4

      Ну, это говорит вам только о том, сколько уникальных значений доступно, но для получения разных значений, т.е. типа комнат, вы можете использовать другую функцию — unique()

      df['room type'].unique() #Output array(['Private room', 'Entire home/apt', 'Shared room', 'Hotel room'], dtype=object)

      Он возвращает массив со всеми уникальными значениями.

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

      Вы можете получить его с помощью другого метода — value_counts() — как показано ниже.

      df.value_counts('room type') #Output room type Entire home/apt 53701 Private room 46556 Shared room 2226 Hotel room 116

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

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

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

      Возвращение совокупной сводки с помощью cumsum()

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

      pandas DataFrame имеет свой собственный метод pandas.DataFrame.cumsum , который возвращает совокупную сумму столбца DataFrame.

      Давайте создадим простой фрейм данных с датами и количеством проданных товаров.

      daterange = pd.date_range('2022-11-24', periods=5, freq='2D') df1 = pd.DataFrame(< 'Date': daterange, 'Products_sold' : [10, 15, 20, 25, 4]>) df1

      Фиктивный набор данных

      Это фиктивный набор данных, который имеет диапазон дат с 24.11.2022 по 02.12.2022 и соответствующее количество продуктов, проданных на каждую дату.

      Теперь предположим, что вы хотите увидеть общее количество товаров, проданных до 30.11.2022. Вам не нужно вычислять его вручную, скорее используйте метод pandas.DataFrame.cumsum получит это для вас всего за одну строку кода.

      df1["Products_sold"].cumsum() #Output 0 10 1 25 2 45 3 70 4 74

      Он просто вернул текущий итог по определенному столбцу. Но это трудно понять, так как вы не видите никаких дат или исходных значений в выходных данных.

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

      df1["Total_products_sold"] = df1["Products_sold"].cumsum() df1

      Накопительная сумма или текущий итог в фрейме данных Pandas

      Вы получили общий объем вашего столбца всего в одной строке кода!

      Обычно наблюдаемые варианты использования кумулятивной суммы заключаются в том, чтобы понять, «сколько до сих пор», например:

      • Насколько повысился уровень воды в реке до сих пор
      • Сколько продаж, продуктов продано до определенного времени
      • Какой остаток остается на счете после каждой транзакции

      Таким образом, знание того, как получить cumsum в вашем наборе данных, может стать настоящим спасением в вашем аналитическом проекте.

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

      Агрегирование несколькими функциями с помощью agg()

      Вы всегда можете объединить необработанные данные, чтобы представить статистические данные, такие как минимум, максимум, сумма и количество. Но вам действительно не нужно делать это вручную, когда вы используете pandas для анализа данных.

      Pandas предлагает функцию — agg() — которая может быть использована для объекта pandas DataFrame groupby. Этот объект создается, когда метод DataFrame groupby() используется для группировки данных по категориям.

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

      Например, вы можете сгруппировать набор данных Airbnb по типу комнаты, чтобы создать объект pandas.DataFrame.groupby .

      df_room = df.groupby('room type') df_room #Output

      Теперь вы можете применить агрегатную функцию — sum — к столбцам number of reviews и minimum nights, как показано ниже.

      df_room.agg()

      Агрегирование данных в pandas

      Все, что вам нужно сделать, это передать словарь функции agg() , в котором ключами являются имена столбцов, а значениями - имена агрегированных функций, такие как sum , max , min .

      Вы также можете применить несколько функций к одному столбцу или даже разные функции к разным столбцам.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *