Рубрики
Без рубрики

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

Автор оригинала: Guest Contributor.

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

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

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

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

  1. Он может представлять данные таким образом, который подходит для анализа данных с помощью своих структур данных Series и DataFrame .
  2. Пакет содержит несколько методов для удобной фильтрации данных.
  3. 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 имеет две основные структуры данных для хранения данных:

  1. Серии
  2. Фрейм данных

Серии

Ряд подобен одномерному массиву. Он может хранить данные любого типа. Значения 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. Чтобы получить максимальную отдачу от панд, я бы предложил вам попрактиковаться в примерах из этой статьи, а также протестировать библиотеку с вашими собственными наборами данных. Счастливого кодирования!