Учебник для начинающих по библиотеке Python Pandas

Pandas - это пакет Python с открытым исходным кодом, который предоставляет множество инструментов для анализа данных. Пакет поставляется с несколькими структурами данных, которые можно использовать для множества различных задач манипулирования данными. Он также имеет множество методов, которые можно вызывать для анализа данных, что может пригодиться при работе над проблемами науки о данных и машинного обучения в Python. Преимущества использования Pandas Ниже приведены некоторые преимущества библиотеки Pandas [https://pandas.pydata.org/]: 1. Она может представлять

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

Преимущества использования Pandas

Ниже приведены некоторые из преимуществ библиотеки Pandas :

  1. Он может представлять данные в виде, подходящем для анализа данных, с помощью структур данных Series и DataFrame
  2. Пакет содержит несколько методов для удобной фильтрации данных.
  3. Pandas имеет множество утилит для беспрепятственного выполнения операций ввода / вывода. Он может считывать данные из различных форматов, таких как CSV, TSV, MS Excel и т. Д.

Установка Pandas

Стандартный дистрибутив Python не поставляется с модулем Pandas. Чтобы использовать этот сторонний модуль, вы должны его установить.

Хорошая особенность Python заключается в том, что он поставляется в комплекте с инструментом под названием pip, который можно использовать для установки Pandas. Для установки вам необходимо выполнить следующую команду:

 $ pip install pandas 

Если вы установили Anaconda в своей системе, просто выполните следующую команду, чтобы установить Pandas:

 $ conda install pandas 

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

 $ conda install pandas=0.23.4 

Структуры данных Pandas

Pandas имеет две основные структуры данных для хранения данных:

  1. Ряд
  2. DataFrame

Ряд

Серия похожа на одномерный массив. Он может хранить данные любого типа. Значения а панды Series изменчивы , но размер Series неизменен и не может быть изменен.

Первому элементу в серии присваивается индекс 0 , а последнему элементу - индекс N-1 , где N - общее количество элементов в серии.

Чтобы создать Series Pandas, мы должны сначала импортировать пакет Pandas с помощью команды import Python:

 import pandas as pd 

Чтобы создать Series , мы вызываем метод pd.Series() и передаем массив, как показано ниже:

 series1 = pd.Series([1,2,3,4]) 

Затем запустите print чтобы отобразить содержимое Series :

 print(series1) 

Выход:

 0 1 
 1 2 
 2 3 
 3 4 
 dtype: int64 

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

Первый столбец обозначает индексы элементов.

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

Вы можете устранить ошибку, выполнив код следующим образом:

 import pandas as pd 
 import sys 
 
 sys.__stdout__ = sys.stdout 
 
 series1 = pd.Series([1,2,3,4]) 
 print(series1) 

Series также может быть создана из массива numpy. Давайте создадим массив numpy, а затем преобразуем его в Series Pandas:

 import pandas as pd 
 import numpy as np 
 import sys 
 
 sys.__stdout__ = sys.stdout 
 
 fruits = np.array(['apple','orange','mango','pear']) 
 series2 = pd.Series(fruits) 
 print(series2) 

Выход:

 0 apple 
 1 orange 
 2 mango 
 3 pear 
 dtype: object 

Начнем с импорта необходимых библиотек, включая numpy . Затем мы вызвали array() numpy, чтобы создать массив фруктов. Затем мы используем Series() и передаем ей массив, который мы хотим преобразовать в серию. Наконец, мы вызываем print() для отображения Series .

DataFrame

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

Чтобы создать DataFrame, вы можете начать с нуля или преобразовать другие структуры данных, такие как массивы Numpy, в DataFrame. Вот как вы можете создать DataFrame с нуля:

 import pandas as pd 
 df = pd.DataFrame({ 
 "Column1": [1, 4, 8, 7, 9], 
 "Column2": ['a', 'column', 'with', 'a', 'string'], 
 "Column3": [1.23, 23.5, 45.6, 32.1234, 89.453], 
 "Column4": [True, False, True, False, True] 
 }) 
 print(df) 

Выход:

 Column1 Column2 Column3 Column4 
 0 1 a 1.2300 True 
 1 4 column 23.5000 False 
 2 8 with 45.6000 True 
 3 7 a 32.1234 False 
 4 9 string 89.4530 True 

В этом примере мы создали DataFrame с именем df . Первый столбец DataFrame имеет целочисленные значения. Во втором столбце есть строка, в третьем столбце - значения с плавающей запятой, а в четвертом столбце - логические значения.

Оператор print(df) отобразит нам содержимое DataFrame через консоль, что позволит нам проверить и проверить его содержимое.

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

Чтобы создать DataFrame, мы должны вызвать метод pd.DataFrame() как показано в приведенном выше примере.

Мы можем создать DataFrame из списка или даже набора списков. Нам нужно только вызвать метод pd.DataFrame() и затем передать ему переменную списка в качестве единственного аргумента.

Рассмотрим следующий пример:

 import pandas as pd 
 mylist = [4, 8, 12, 16, 20] 
 df = pd.DataFrame(mylist) 
 print(df) 

Выход:

 0 
 0 4 
 1 8 
 2 12 
 3 16 
 4 20 

В этом примере мы создали список с именем mylist с последовательностью из 5 целых чисел. Затем мы вызвали метод DataFrame() и передали ему имя списка в качестве аргумента. Здесь произошло преобразование списка в DataFrame.

Затем мы распечатали содержимое DataFrame. DataFrame имеет столбец по умолчанию, показывающий индексы, причем первый элемент имеет индекс 0, а последний - индекс N-1 , где N - общее количество элементов в DataFrame.

Вот еще один пример:

 import pandas as pd 
 items = [['Phone', 2000], ['TV', 1500], ['Radio', 800]] 
 df = pd.DataFrame(items, columns=['Item', 'Price'], dtype=float) 
 print(df) 

Выход:

 Item Price 
 0 Phone 2000.0 
 1 TV 1500.0 
 2 Radio 800.0 

Здесь мы создали список с именами items с набором из 3 элементов. Для каждого товара у нас есть название и цена. Затем список передается DataFrame() , чтобы преобразовать его в объект DataFrame

В этом примере также указаны имена столбцов для DataFrame. Числовые значения также были преобразованы в значения с плавающей запятой, поскольку мы указали dtype как «float».

Чтобы получить сводку данных этого элемента, мы можем вызвать describe() для переменной DataFrame, то есть df :

 df.describe() 

Выход:

 Price 
 count 3.000000 
 mean 1433.333333 
 std 602.771377 
 min 800.000000 
 25% 1150.000000 
 50% 1500.000000 
 75% 1750.000000 
 max 2000.000000 

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

Импорт данных

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

К счастью, Pandas предоставляет нам множество методов, которые мы можем использовать для загрузки данных из таких источников в Pandas DataFrame.

Импорт данных CSV

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

В этом примере мы создадим CSV-файл с именем cars.csv . В файле должны быть следующие данные:

 Number,Type,Capacity 
 SSD,Premio,1800 
 KCN,Fielder,1500 
 USG,Benz,2200 
 TCH,BMW,2000 
 KBQ,Range,3500 
 TBD,Premio,1800 
 KCP,Benz,2200 
 USD,Fielder,1500 
 UGB,BMW,2000 
 TBG,Range,3200 

Вы можете скопировать данные и вставить их в текстовый редактор, например «Блокнот», а затем сохранить их с именем cars.csv в том же каталоге, что и ваши скрипты Python.

Pandas предоставляет нам метод с именем read_csv который можно использовать для чтения значений CSV в Pandas DataFrame. Метод принимает в качестве аргумента путь к CSV-файлу.

Следующий код - это то, что мы будем использовать, чтобы помочь нам прочитать файл cars.csv:

 import pandas as pd 
 data = pd.read_csv('cars.csv') 
 print(data) 

Выход:

 Number Type Capacity 
 0 SSD Premio 1800 
 1 KCN Fielder 1500 
 2 USG Benz 2200 
 3 TCH BMW 2000 
 4 KBQ Range 3500 
 5 TBD Premio 1800 
 6 KCP Benz 2200 
 7 USD Fielder 1500 
 8 UGB BMW 2000 
 9 TBG Range 3200 

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

Если вы сохранили свой файл по другому пути, убедитесь, что вы передали правильный путь в качестве аргумента метода. Это может быть относительный путь, например «../cars.csv», или абсолютный путь, например «/Users/nicholas/data/cars.csv».

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

Это можно сделать, вызвав метод head() в DataFrame, как показано ниже:

 data.head() 

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

Выход:

 Number Type Capacity 
 0 SSD Premio 1800 
 1 KCN Fielder 1500 
 2 USG Benz 2200 
 3 TCH BMW 2000 
 4 KBQ Range 3500 

Метод loc() - прекрасная утилита, которая помогает нам читать только определенные строки определенного столбца в наборе данных, как показано в следующем примере:

 import pandas as pd 
 data = pd.read_csv('cars.csv') 
 
 print (data.loc[[0, 4, 7], ['Type']]) 

Выход:

 Type 
 0 Premio 
 4 Range 
 7 Fielder 

Здесь мы использовали метод loc() только для чтения элементов с индексами 0, 4 и 7 столбца Type.

Иногда Wwe может потребоваться прочитать только определенные столбцы, а не другие. Это также можно сделать с помощью loc() , показанного ниже в этом примере:

 import pandas as pd 
 data = pd.read_csv('cars.csv') 
 
 print (data.loc[:, ['Type', 'Capacity']]) 

Выход:

 Type Capacity 
 0 Premio 1800 
 1 Fielder 1500 
 2 Benz 2200 
 3 BMW 2000 
 4 Range 3500 
 5 Premio 1800 
 6 Benz 2200 
 7 Fielder 1500 
 8 BMW 2000 
 9 Range 3200 

Здесь мы использовали loc() метод , чтобы прочитать все строки (далее : часть) только два из наших столбцов из набора данных, то есть, тип и емкость колонны, как указано в аргументе.

Импорт данных Excel

В дополнение к read_csv , Pandas также имеет read_excel которую можно использовать для чтения данных Excel в Pandas DataFrame. В этом примере мы будем использовать файл Excel с именем worker.xlsx с подробной информацией о сотрудниках компании.

Следующий код можно использовать для загрузки содержимого файла Excel в Pandas DataFrame:

 import pandas as pd 
 data = pd.read_excel('workers.xlsx') 
 print (data) 

Выход:

 ID Name Dept Salary 
 0 1 John ICT 3000 
 1 2 Kate Finance 2500 
 2 3 Joseph HR 3500 
 3 4 George ICT 2500 
 4 5 Lucy Legal 3200 
 5 6 David Library 2000 
 6 7 James HR 2000 
 7 8 Alice Security 1500 
 8 9 Bosco Kitchen 1000 
 9 10 Mike ICT 3300 

После вызова read_excel мы затем передали имя файла в качестве аргумента, который read_excel использовал для открытия / загрузки файла и последующего анализа данных. Затем print() помогает нам отображать содержимое DataFrame, как мы это делали в прошлых примерах.

И, как и в нашем примере CSV, эту функцию можно объединить с loc() чтобы помочь нам прочитать определенные строки и столбцы из файла Excel.

Например:

 import pandas as pd 
 data = pd.read_excel('workers.xlsx') 
 
 print (data.loc[[1,4,7],['Name','Salary']]) 

Выход:

 Name Salary 
 1 Kate 2500 
 4 Lucy 3200 
 7 Alice 1500 

Мы использовали метод loc() для получения значений Name и Salary элементов с индексами 1, 4 и 7.

Pandas также позволяет нам читать с двух листов Excel одновременно. Предположим, что наши предыдущие данные находятся в Sheet1, а у нас есть некоторые другие данные в Sheet2 того же файла Excel. Следующий код показывает, как мы можем читать с двух листов одновременно:

 import pandas as pd 
 with pd.ExcelFile('workers.xlsx') as x: 
 s1 = pd.read_excel(x, 'Sheet1') 
 s2 = pd.read_excel(x, 'Sheet2') 
 
 print("Sheet 1:") 
 print (s1) 
 print("") 
 print("Sheet 2:") 
 print (s2) 

Выход:

 Sheet 1: 
 ID Name Dept Salary 
 0 1 John ICT 3000 
 1 2 Kate Finance 2500 
 2 3 Joseph HR 3500 
 3 4 George ICT 2500 
 4 5 Lucy Legal 3200 
 5 6 David Library 2000 
 6 7 James HR 2000 
 7 8 Alice Security 1500 
 8 9 Bosco Kitchen 1000 
 9 10 Mike ICT 3300 
 
 Sheet 2: 
 ID Name Age Retire 
 0 1 John 55 2023 
 1 2 Kate 45 2033 
 2 3 Joseph 55 2023 
 3 4 George 35 2043 
 4 5 Lucy 42 2036 
 5 6 David 50 2028 
 6 7 James 30 2048 
 7 8 Alice 24 2054 
 8 9 Bosco 33 2045 
 9 10 Mike 35 2043 

Произошло то, что мы объединили read_excel() с ExcelFile оболочкой ExcelFile. Переменная x была создана при вызове класса-оболочки и with ключевым словом Python, которое мы используем для временного открытия файла.

Из переменной x ExcelFile мы создали еще две переменные, s1 и s2 для представления содержимого, считанного с разных листов.

Затем мы использовали print для просмотра содержимого двух листов в консоли. Бланк print заявление, print("") , используется только для печати пустой строки между нашими данными листа.

Преодоление данных

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

Слияние

Библиотека Pandas позволяет нам присоединяться к объектам DataFrame через функцию merge() Давайте создадим два DataFrames и продемонстрируем, как их объединить.

Вот первый DataFrame, df1 :

 import pandas as pd 
 
 d = { 
 'subject_id': ['1', '2', '3', '4', '5'], 
 'student_name': ['John', 'Emily', 'Kate', 'Joseph', 'Dennis'] 
 } 
 df1 = pd.DataFrame(d, columns=['subject_id', 'student_name']) 
 print(df1) 

Выход:

 subject_id student_name 
 0 1 John 
 1 2 Emily 
 2 3 Kate 
 3 4 Joseph 
 4 5 Dennis 

Вот код для создания второго DataFrame, df2 :

 import pandas as pd 
 
 data = { 
 'subject_id': ['4', '5', '6', '7', '8'], 
 'student_name': ['Brian', 'William', 'Lilian', 'Grace', 'Caleb'] 
 } 
 df2 = pd.DataFrame(data, columns=['subject_id', 'student_name']) 
 print(df2) 

Выход:

 subject_id student_name 
 0 4 Brian 
 1 5 William 
 2 6 Lilian 
 3 7 Grace 
 4 8 Caleb 

Теперь нам нужно объединить два DataFrames, то есть df1 и df2 по значениям subject_id . Мы просто вызываем merge() как показано ниже:

 pd.merge(df1, df2, on='subject_id') 

Выход:

 subject_id student_name_x student_name_y 
 0 4 Joseph Brian 
 1 5 Dennis William 

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

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

Группировка

Группировка - это процесс помещения данных в различные категории. Вот простой пример:

 # import pandas library 
 import pandas as pd 
 
 raw = { 
 'Name': ['John', 'John', 'Grace', 'Grace', 'Benjamin', 'Benjamin', 'Benjamin', 
 'Benjamin', 'John', 'Alex', 'Alex', 'Alex'], 
 'Position': [2, 1, 1, 4, 2, 4, 3, 1, 3, 2, 4, 3], 
 'Year': [2009, 2010, 2009, 2010, 2010, 2010, 2011, 2012, 2011, 2013, 2013, 2012], 
 'Marks':[408, 398, 422, 376, 401, 380, 396, 388, 356, 402, 368, 378] 
 } 
 df = pd.DataFrame(raw) 
 
 group = df.groupby('Year') 
 print(group.get_group(2010)) 

Выход:

 Marks Name Position Year 
 1 398 John 1 2010 
 3 376 Grace 4 2010 
 5 380 Benjamin 4 2010 

В этом простом примере мы сгруппировали данные по годам, в данном случае это был 2010 год. Мы также могли сгруппировать данные по любым другим столбцам, таким как «Имя», «Позиция» и т. Д.

Конкатенация

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

Давайте продемонстрируем, как объединить DataFrames, используя наши два предыдущих Dataframes, то есть df1 и df2 , каждый с двумя столбцами, «subject_id» и «student_name»:

 print(pd.concat([df1, df2])) 

Выход:

 subject_id student_name 
 0 1 John 
 1 2 Emily 
 2 3 Kate 
 3 4 Joseph 
 4 5 Dennis 
 0 4 Brian 
 1 5 William 
 2 6 Lilian 
 3 7 Grace 
 4 8 Caleb 

Описательная статистика

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

Давайте сначала создадим DataFrame, показывающий имена учащихся и их оценки по математике и английскому языку:

 import pandas as pd 
 
 data = { 
 'Name': ['John', 'Alice', 'Joseph', 'Alex'], 
 'English': [64, 78, 68, 58], 
 'Maths': [76, 54, 72, 64] 
 } 
 
 df = pd.DataFrame(data) 
 print(df) 

Выход:

 English Maths Name 
 0 64 76 John 
 1 78 54 Alice 
 2 68 72 Joseph 
 3 58 64 Alex 

Нам нужно только вызвать describe() в DataFrame и получить различные меры, такие как среднее значение, стандартное отклонение, медиана, максимальный элемент, минимальный элемент и т. Д.:

 df.describe() 

Выход:

 English Maths 
 count 4.000000 4.000000 
 mean 67.000000 66.500000 
 std 8.406347 9.712535 
 min 58.000000 54.000000 
 25% 62.500000 61.500000 
 50% 66.000000 68.000000 
 75% 70.500000 73.000000 
 max 78.000000 76.000000 

Как видите, метод describe() полностью проигнорировал столбец «Имя», поскольку он не является числовым, что нам и нужно. Это упрощает работу вызывающего абонента, поскольку вам не нужно беспокоиться об удалении нечисловых столбцов перед вычислением желаемой числовой статистики.

Заключение

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

comments powered by Disqus