Автор оригинала: Guest Contributor.
Учебник для начинающих по библиотеке Python Pandas
Pandas-это пакет Python с открытым исходным кодом, который предоставляет множество инструментов для анализа данных. Пакет поставляется с несколькими структурами данных, которые могут быть использованы для многих различных задач обработки данных. Он также имеет множество методов, которые могут быть вызваны для анализа данных, что очень удобно при работе над проблемами науки о данных и машинного обучения в Python.
Преимущества использования Панд
Ниже приведены некоторые из преимуществ библиотеки Pandas :
- Он может представлять данные таким образом, который подходит для анализа данных с помощью своих структур данных
Series
иDataFrame
. - Пакет содержит несколько методов для удобной фильтрации данных.
- Pandas имеет множество утилит для выполнения операций ввода-вывода в бесшовной манере. Он может считывать данные из различных форматов, таких как CSV, TSV, MS Excel и т. Д.
Установка Панд
Стандартный дистрибутив Python не поставляется с модулем Pandas. Чтобы использовать этот сторонний модуль, вы должны установить его.
Самое приятное в Python то, что он поставляется в комплекте с инструментом под названием pip , который можно использовать для установки панд. Для выполнения установки вам необходимо выполнить следующую команду:
$ pip install pandas
Если вы установили Anaconda в своей системе, просто выполните следующую команду для установки Pandas:
$ conda install pandas
Настоятельно рекомендуется установить последнюю версию пакета Pandas. Однако если вы хотите установить более старую версию, вы можете указать ее, выполнив команду conda install
следующим образом:
$ conda install pandas=0.23.4
Структуры данных Панд
Pandas имеет две основные структуры данных для хранения данных:
- Серии
- Фрейм данных
Серии
Ряд подобен одномерному массиву. Он может хранить данные любого типа. Значения Panda Series
изменяемы, но размер a Series
неизменен и не может быть изменен.
Первому элементу в ряду присваивается индекс 0
, в то время как последний элемент находится в индексе N-1
, где N
– общее количество элементов в ряду.
Чтобы создать Pandas Series
, мы должны сначала импортировать пакет Pandas с помощью команды Python import
:
import pandas as pd
Чтобы создать Series
, мы вызываем метод pd.Series()
и передаем массив, как показано ниже:
series1 = pd.Series([1,2,3,4])
Затем запустите инструкцию print
, чтобы отобразить содержимое серии :
print(series1)
Выход:
0 1 1 2 2 3 3 4 dtype: int64
Вы можете видеть, что у нас есть два столбца, первый с числами, начинающимися с индекса 0
и второй с элементами, которые были добавлены в серию.
Первый столбец обозначает индексы для элементов.
Однако при попытке отобразить серию
может возникнуть ошибка . Основная причина этой ошибки заключается в том, что Pandas ищет объем информации для отображения, поэтому вы должны предоставить выходную информацию sys.
Вы можете устранить ошибку, выполнив следующий код:
import pandas as pd import sys sys.__stdout__ = sys.stdout series1 = pd.Series([1,2,3,4]) print(series1)
A Series
также может быть создан из массива numpy . Давайте создадим массив numpy, а затем преобразуем его в серию Pandas Series
:
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
. Затем мы вызвали функцию numpy array ()
, чтобы создать массив фруктов. Затем мы используем функцию Pandas Series()
и передаем ей массив, который хотим преобразовать в серию. Наконец, мы вызываем функцию print()
для отображения серии .
Фрейм данных
Фрейм данных Панд можно рассматривать как таблицу. Он организует данные в строки и столбцы, делая их двумерной структурой данных. Потенциально столбцы имеют другой тип, а размер фрейма данных является изменяемым и, следовательно, может быть изменен.
Чтобы создать фрейм данных, вы можете начать с нуля или преобразовать другие структуры данных, такие как массивы Numpy, в фрейм данных. Вот как вы можете создать фрейм данных с нуля:
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
В этом примере мы создали фрейм данных с именем df
. Первый столбец фрейма данных имеет целочисленные значения. Второй столбец имеет строку, третий столбец имеет значения с плавающей запятой, а четвертый столбец имеет логические значения.
Оператор print(df)
отобразит нам содержимое фрейма данных через консоль, что позволит нам проверить и проверить его содержимое.
Однако при отображении фрейма данных вы, возможно, заметили, что в начале таблицы есть дополнительный столбец, элементы которого начинаются с 0. Этот столбец создается автоматически и помечает индексы строк.
Чтобы создать фрейм данных, мы должны вызвать метод pd.DataFrame ()
, как показано в приведенном выше примере.
Мы можем создать фрейм данных из списка или даже набора списков. Нам нужно только вызвать метод pd.DataFrame ()
, а затем передать ему переменную list в качестве единственного аргумента.
Рассмотрим следующий пример:
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 целых чисел. Затем мы вызвали метод Data Frame()
и передали ему имя списка в качестве аргумента. Именно здесь произошло преобразование списка в фрейм данных.
Затем мы распечатали содержимое фрейма данных. Фрейм данных имеет столбец по умолчанию, показывающий индексы , причем первый элемент находится в индексе 0, а последний-в индексе N-1
, где N-общее количество элементов в фрейме данных.
Вот еще один пример:
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 элементов. Для каждого товара у нас есть название и цена. Затем список передается методу Data Frame()
для преобразования его в объект DataFrame
.
В этом примере также были указаны имена столбцов для фрейма данных. Числовые значения также были преобразованы в значения с плавающей запятой, так как мы указали аргумент type
как “float”.
Чтобы получить сводку данных этого элемента, мы можем вызвать функцию describe()
для переменной фрейма данных, то есть 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.
Импорт данных 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. Метод принимает путь к 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()
для фрейма данных, как показано ниже:
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 .
Иногда нам может понадобиться читать только некоторые колонки, а не другие. Это также можно сделать с помощью метода 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()
для чтения всех строк (часть :
) только двух наших столбцов из набора данных, то есть столбцов Type и Capacity , как указано в аргументе.
Импорт Данных Excel
В дополнение к методу read_csv
у Pandas также есть функция read_excel
, которая может использоваться для чтения данных Excel в фрейм данных Pandas. В этом примере мы будем использовать файл Excel с именем workers.xlsx с подробностями о работниках в компании.
Следующий код можно использовать для загрузки содержимого файла Excel в фрейм данных Pandas:
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()
помогает нам отобразить содержимое фрейма данных, как мы это делали в предыдущих примерах.
И точно так же, как в нашем примере 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 одновременно. Предположим, что наши предыдущие данные находятся в листе 1, и у нас есть некоторые другие данные в листе 2 того же файла 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()
с классом Excel File
wrapper. Переменная x
была создана при вызове класса-оболочки и с ключевым словом
Python, которое мы используем для временного открытия файла.
Из файла Excel
variable x
мы создали еще две переменные, s1
и s2
, чтобы представить содержимое, которое было прочитано с разных листов.
Затем мы использовали операторы print
для просмотра содержимого двух листов в консоли. Оператор blank print
, print("")
, используется только для печати пустой строки между данными нашего листа.
Пререкания с данными
Обработка данных-это процесс обработки данных для подготовки их к использованию на следующем этапе. Примеры процессов обработки данных включают слияние, группировку и конкатенацию. Такого рода манипуляции часто необходимы в науке о данных, чтобы получить ваши данные в форме, которая хорошо работает с любым анализом или алгоритмами, которые вы собираетесь использовать.
Слияние
Библиотека Pandas позволяет нам объединять объекты DataFrame с помощью функции merge ()
. Давайте создадим два фрейма данных и продемонстрируем, как их объединить.
Вот первый кадр данных, 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
Вот код для создания второго фрейма данных, 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
Теперь нам нужно объединить два фрейма данных, то есть 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
Слияние делает то, что оно возвращает строки из обоих фреймов данных с одинаковым значением для столбца, который вы используете для слияния.
Есть много других способов использования функции pd.merge
, которые мы не будем рассматривать в этой статье, например, какие данные должны быть объединены, как они должны быть объединены, если они должны быть отсортированы и т. Д. Для получения дополнительной информации ознакомьтесь с официальной документацией по функции 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 ()
.
Давайте продемонстрируем, как объединить фреймы данных, используя наши два предыдущих фрейма данных , то есть 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 ()
, мы получаем описательную статистику для числовых столбцов, но символьные столбцы исключаются.
Давайте сначала создадим фрейм данных, показывающий имена студентов и их оценки по математике и английскому языку:
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()
в фрейме данных и получить различные показатели, такие как среднее значение, стандартное отклонение, медиана, максимальный элемент, минимальный элемент и т. Д.:
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()
полностью проигнорировал столбец “Name”, поскольку он не является числовым, что нам и нужно. Это упрощает работу вызывающего абонента, так как вам не нужно беспокоиться об удалении нечисловых столбцов перед вычислением нужной вам числовой статистики.
Вывод
Pandas-это чрезвычайно полезная библиотека Python, особенно для науки о данных. Различные функциональные возможности Pandas делают предварительную обработку данных чрезвычайно простой. В этой статье дается краткое введение в основные функциональные возможности библиотеки. В этой статье мы увидели рабочие примеры всех основных утилит библиотеки Pandas. Чтобы получить максимальную отдачу от панд, я бы предложил вам попрактиковаться в примерах из этой статьи, а также протестировать библиотеку с вашими собственными наборами данных. Счастливого кодирования!