Pandas - это пакет Python с открытым исходным кодом, который предоставляет множество инструментов для анализа данных. Пакет поставляется с несколькими структурами данных, которые можно использовать для множества различных задач манипулирования данными. Он также имеет множество методов, которые можно вызывать для анализа данных, что может пригодиться при работе над проблемами науки о данных и машинного обучения в Python.
Преимущества использования Pandas
Ниже приведены некоторые из преимуществ библиотеки Pandas :
- Он может представлять данные в виде, подходящем для анализа данных,
с помощью структур данных
Series
иDataFrame
- Пакет содержит несколько методов для удобной фильтрации данных.
- 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 имеет две основные структуры данных для хранения данных:
- Ряд
- 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, я предлагаю вам попрактиковаться в примерах из этой статьи, а также протестировать библиотеку с вашими собственными наборами данных. Удачного кодирования!