Как установить пакет pandas и работать со структурами данных в Python 3

Вступление

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

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

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

В этом руководстве мы сначала установимpandas, а затем познакомим вас с основными структурами данных:Series иDataFrames.

Установкаpandas

Как и другие пакеты Python, мы можем установитьpandas с помощьюpip.

Во-первых, давайте перейдем к нашему выборуlocal programming environment илиserver-based programming environment и установим тамpandas вместе с его зависимостями:

pip install pandas numpy python-dateutil pytz

Вы должны получить вывод, подобный следующему:

OutputSuccessfully installed pandas-0.19.2

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

conda install pandas

На этом этапе вы готовы начать работу с пакетомpandas.

Серии

Вpandas,Series - одномерные массивы, которые могут содержать любыеdata type. Метки осей вместе обозначаются какindex.

Давайте запустим интерпретатор Python в вашей командной строке следующим образом:

python

Из интерпретатора импортируйте пакетыnumpy иpandas в свое пространство имен:

import numpy as np
import pandas as pd

Прежде чем мы начнем работать с Series, давайте посмотрим, как это обычно выглядит:

s = pd.Series([data], index=[index])

Вы можете заметить, что данные структурированы как Pythonlist.

Без объявления индекса

Мы введем целочисленные данные, а затем предоставим параметр имени для серии, но мы не будем использовать параметрindex, чтобы увидеть, какpandas заполняет его неявно:

s = pd.Series([0, 1, 4, 9, 16, 25], name='Squares')

Теперь давайте назовем Series, чтобы увидеть, что с ним делаетpandas:

s

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

Output0     0
1     1
2     4
3     9
4    16
5    25
Name: Squares, dtype: int64

Хотя мы не предоставили индекс для массива, он был добавлен неявно из целых значений от0 до5.

Объявление индекса

Как показывает приведенный выше синтаксис, мы также можем создавать Series с явным индексом. Мы будем использовать данные о средней глубине в метрах океанов Земли:

avg_ocean_depth = pd.Series([1205, 3646, 3741, 4080, 3270], index=['Arctic',  'Atlantic', 'Indian', 'Pacific', 'Southern'])

Сконструировав Series, давайте назовем его, чтобы увидеть результат:

avg_ocean_depth
OutputArctic      1205
Atlantic    3646
Indian      3741
Pacific     4080
Southern    3270
dtype: int64

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

Индексирование и нарезка серии

С сериейpandas мы можем индексировать по соответствующему номеру для получения значений:

avg_ocean_depth[2]
Output3741

Мы также можем нарезать по номеру индекса, чтобы получить значения:

avg_ocean_depth[2:4]
OutputIndian     3741
Pacific    4080
dtype: int64

Кроме того, мы можем вызвать значение индекса, чтобы вернуть значение, которому оно соответствует:

avg_ocean_depth['Indian']
Output3741

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

avg_ocean_depth['Indian':'Southern']
OutputIndian      3741
Pacific     4080
Southern    3270
dtype: int64

Обратите внимание, что в этом последнем примере при разрезании по именам индексов два параметра являются включающими, а не исключающими.

Давайте выйдем из интерпретатора Python с помощьюquit().

Серия инициализирована со словарями

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

Давайте создадим файл с именемocean.py и добавим следующий словарь с вызовом для его печати.

ocean.py

import numpy as np
import pandas as pd

avg_ocean_depth = pd.Series({
                    'Arctic': 1205,
                    'Atlantic': 3646,
                    'Indian': 3741,
                    'Pacific': 4080,
                    'Southern': 3270
})

print(avg_ocean_depth)

Теперь мы можем запустить файл в командной строке:

python ocean.py

Мы получим следующий вывод:

OutputArctic      1205
Atlantic    3646
Indian      3741
Pacific     4080
Southern    3270
dtype: int64

Ряд отображается упорядоченно, с индексом (составленным из наших ключей) слева и набором значений справа.

Это будет вести себя как другие словари Python, так как вы можете получить доступ к значениям, вызвав ключ, что мы можем сделать так:

ocean_depth.py

...
print(avg_ocean_depth['Indian'])
print(avg_ocean_depth['Atlantic':'Indian'])
Output3741
Atlantic    3646
Indian      3741
dtype: int64

Однако эти Серии теперь являются объектами Python, поэтому вы не сможете использовать функции словаря.

Словари Python предоставляют другую форму для установки Series вpandas.

DataFrames

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

Фреймы данных похожи на электронные таблицы или таблицы SQL. В общем, когда вы работаете сpandas, DataFrames будут наиболее распространенным объектом, который вы будете использовать.

Чтобы понять, как работает DataFramepandas, давайте настроим две серии и затем передадим их в DataFrame. Первой серией будет наша предыдущая серияavg_ocean_depth, а второй -max_ocean_depth, которая содержит данные о максимальной глубине каждого океана на Земле в метрах.

ocean.py

import numpy as np
import pandas as pd


avg_ocean_depth = pd.Series({
                    'Arctic': 1205,
                    'Atlantic': 3646,
                    'Indian': 3741,
                    'Pacific': 4080,
                    'Southern': 3270
})

max_ocean_depth = pd.Series({
                    'Arctic': 5567,
                    'Atlantic': 8486,
                    'Indian': 7906,
                    'Pacific': 10803,
                    'Southern': 7075
})

Настроив эти две серии, давайте добавим DataFrame в конец файла под сериейmax_ocean_depth. В нашем примере обе эти серии имеют одинаковые метки индекса, но если у вас есть серии с разными метками, то отсутствующие значения будут помечены какNaN.

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

ocean.py

...
max_ocean_depth = pd.Series({
                    'Arctic': 5567,
                    'Atlantic': 8486,
                    'Indian': 7906,
                    'Pacific': 10803,
                    'Southern': 7075
})

ocean_depths = pd.DataFrame({
                    'Avg. Depth (m)': avg_ocean_depth,
                    'Max. Depth (m)': max_ocean_depth
})

print(ocean_depths)
Output          Avg. Depth (m)  Max. Depth (m)
Arctic              1205            5567
Atlantic            3646            8486
Indian              3741            7906
Pacific             4080           10803
Southern            3270            7075

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

Сортировка данных в фреймах данных

Мы можемsort the data in the DataFrame, используя функциюDataFrame.sort_values(by=...).

Например, давайте использовать логический параметрascending, который может иметь значениеTrue илиFalse. Обратите внимание, чтоascending - это параметр, который мы можем передать функции, но по убыванию - нет.

ocean_depth.py

...
print(ocean_depths.sort_values('Avg. Depth (m)', ascending=True))
Output          Avg. Depth (m)  Max. Depth (m)
Arctic              1205            5567
Southern            3270            7075
Atlantic            3646            8486
Indian              3741            7906
Pacific             4080           10803

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

Статистический анализ с фреймами данных

Затем давайте посмотрим наsome summary statistics, который мы можем получить изpandas с помощью функцииDataFrame.describe().

Без передачи определенных параметров функцияDataFrame.describe() предоставит следующую информацию для числовых типов данных:

Вернуть Что это значит

count

Подсчет частоты; сколько раз что-то происходит

mean

Среднее или среднее

std

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

min

Минимальное или наименьшее число в наборе

25%

25-й процентиль

50%

50-й процентиль

75%

75-й процентиль

max

Максимальное или наибольшее число в наборе

Пусть Python распечатает для нас эти статистические данные, вызвав наш DataFrameocean_depths с функциейdescribe():

ocean.py

...
print(ocean_depths.describe())

Когда мы запустим эту программу, мы получим следующий вывод:

Output       Avg. Depth (m)  Max. Depth (m)
count        5.000000        5.000000
mean      3188.400000     7967.400000
std       1145.671113     1928.188347
min       1205.000000     5567.000000
25%       3270.000000     7075.000000
50%       3646.000000     7906.000000
75%       3741.000000     8486.000000
max       4080.000000    10803.000000

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

Обработка пропущенных значений

Часто при работе с данными у вас будут отсутствующие значения. Пакетpandas предоставляет множество различных способов дляworking with missing data, который относится к даннымnull или данным, которые отсутствуют по какой-либо причине. Вpandas это называется данными NA и отображается какNaN.

Мы пройдем черезdropping missing values с функциейDataFrame.dropna() иfilling missing values с функциейDataFrame.fillna(). Это гарантирует, что вы не столкнетесь с проблемами при начале работы.

Давайте создадим новый файл с именемuser_data.py, заполним его некоторыми данными с пропущенными значениями и превратим его в DataFrame:

user_data.py

import numpy as np
import pandas as pd


user_data = {'first_name': ['Sammy', 'Jesse', np.nan, 'Jamie'],
        'last_name': ['Shark', 'Octopus', np.nan, 'Mantis shrimp'],
        'online': [True, np.nan, False, True],
        'followers': [987, 432, 321, np.nan]}

df = pd.DataFrame(user_data, columns = ['first_name', 'last_name', 'online', 'followers'])

print(df)

Наш вызов print показывает нам следующий вывод при запуске программы:

Output  first_name      last_name online  followers
0      Sammy          Shark   True      987.0
1      Jesse        Octopus    NaN      432.0
2        NaN            NaN  False      321.0
3      Jamie  Mantis shrimp   True        NaN

Здесь довольно много пропущенных значений.

Давайте сначала отбросим пропущенные значения с помощьюdropna().

user_data.py

...
df_drop_missing = df.dropna()

print(df_drop_missing)

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

Output  first_name last_name online  followers
0      Sammy     Shark   True      987.0

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

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

user_data.py

...
df_fill = df.fillna(0)

print(df_fill)

Когда мы запустим программу, мы получим следующий вывод:

Output  first_name      last_name online  followers
0      Sammy          Shark   True      987.0
1      Jesse        Octopus      0      432.0
2          0              0  False      321.0
3      Jamie  Mantis shrimp   True        0.0

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

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

Заключение

В этом руководстве была представлена ​​вводная информация для анализа данных с помощьюpandas и Python 3. Теперь у вас должен быть установленpandas, и вы можете работать со структурами данных Series и DataFrames в пределахpandas.

Related