- PVSM.RU - https://www.pvsm.ru -
Сегодня речь пойдет о пакете Pandas [1]. Данный пакет делает Python мощным инструментом для анализа данных. Пакет дает возможность строить сводные таблицы, выполнять группировки, предоставляет удобный доступ к табличным данным, а при наличии пакета matplotlib [2] дает возможность рисовать графики на полученных наборах данных. Далее будут показаны основы работы с пакетом, такие как загрузка данных, обращение к полям, фильтрация и построение сводных.
Для начала, скажем, пару слов о структурах хранения данных в Pandas. Основными являются Series и DataFrame.
Series – это проиндексированный одномерный массив значений. Он похож на простой словарь типа dict, где имя элемента будет соответствовать индексу, а значение – значению записи.
DataFrame — это проиндексированный многомерный массив значений, соответственно каждый столбец DataFrame, является структурой Series.
Итак, со структурами чуток разобрались. Перейдем непосредственно к работе с пакетом. Для начала анализа каких-либо данных их надо загрузить. Pandas предоставляет широкий выбор источников данных, например:
Подробней о них можно прочитать в документации [3].
Для пример загрузим 2 текстовых файла. Это можно сделать функцией read_csv() [4]:
from pandas import read_csv
df1 = read_csv("df1.txt")
df2 = read_csv("df2.txt",";") #второй аргумент задает разделитель
Теперь у нас есть 2 набора данных df1, содержащий магазины и количество отгрузок:
shop | qty |
---|---|
427 | 3 |
707 | 4 |
957 | 2 |
437 | 1 |
И df2, содержащий магазин и его город:
shop | name |
---|---|
347 | Киев |
427 | Самара |
707 | Минск |
957 | Иркутск |
437 | Москва |
Над наборами данных можно выполнять различные действия, например объединение, добавление столбцов, добавление записей, фильтрация, построение сводных и другие. Давайте теперь, чтобы продемонстрировать все описанные выше возможности, следующие задачи:
Итак, для добавления нового столбца в набор данных существует команда insert() [5]:
country = [u'Украина',u'РФ',u'Беларусь',u'РФ',u'РФ']
df2.insert(1,'country',country)
В нашем случае функции передается 3 аргумент:
Вид df2 после выполнения выше описанных операций:
shop | country | name |
---|---|---|
347 | Украина | Киев |
427 | РФ | Самара |
707 | Беларусь | Минск |
957 | РФ | Иркутск |
437 | РФ | Москва |
Теперь на надо выбрать магазин, у которого страна будет равна `Украина`. Для обращения к столбцам в DataFrame существует 2 способа:
Для того, чтобы отфильтровать набор данных можно использовать квадратные скобки внутри которых будет условие НаборДанных[условие]. Условие должно содержать имена полей, в формате описанном выше, и условие, налагаемое на них. Таким образом выбрать брать интересующий магазин и заменить его номер можно так:
t = df2[df2.country == u'Украина']
t.shop = 345
Результатом выполнения данного кода, будет новый промежуточный набор данных t, содержащий одну запись:
shop | country | name |
---|---|---|
345 | Украина | Киев |
Для того чтобы добавить полученную на предыдущем шаге запись, нужно выполнить функцию append(), в качестве аргумента которой передается набор данных, который нужно добавить к исходному:
df2 = df2.append(t)
Теперь к нашему основному списку магазинов df2, можно подтянуть количество из набора данных df1. Сделать это можно с помощью функции merge() [6], которая соединяет два набора данных (аналог join в SQL):
res = df2.merge(df1, 'left', on='shop')
В качестве параметров функция принимает:
Подробнее о параметрах можно прочитать в документации. Набор данных перед финальной операцией выглядит так:
shop | country | name | qty |
---|---|---|---|
347 | Украина | Киев | NaN |
427 | РФ | Самара | 3 |
707 | Беларусь | Минск | 4 |
957 | РФ | Иркутск | 2 |
437 | РФ | Москва | 1 |
345 | Украина | Киев | NaN |
Осталось построить сводную таблицу, чтобы понять, какое количество по каждой стране отгружено. Для этого существует функция pivot_table() [7]. В нашем примере функция в качестве параметров принимает:
Код для построения сводной выглядит так:
res.pivot_table(['qty'],['country'], aggfunc='sum', fill_value = 0)
Итоговая таблица будет выглядеть так:
country | qty |
---|---|
Беларусь | 4 |
РФ | 6 |
Украина | 0 |
В качестве заключения хотелось бы сказать, Pandas является неплохой альтернативой Excel при работе с большими объемами данных. Показанные функции это только верхушка айсберга под название Pandas. В дальнейшем, я планирую написать серию статей в которых будет показана вся мощь данного пакета.
Автор: kuznetsovin
Источник [8]
Сайт-источник PVSM.RU: https://www.pvsm.ru
Путь до страницы источника: https://www.pvsm.ru/python/45304
Ссылки в тексте:
[1] Pandas: http://pandas.pydata.org/
[2] matplotlib: http://matplotlib.org/
[3] документации: http://pandas.pydata.org/pandas-docs/stable/index.html
[4] read_csv(): http://pandas.pydata.org/pandas-docs/stable/generated/pandas.io.parsers.read_csv.html#pandas.io.parsers.read_csv
[5] insert(): http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.insert.html?highlight=insert#pandas.DataFrame.insert
[6] merge(): http://pandas.pydata.org/pandas-docs/stable/generated/pandas.DataFrame.merge.html?highlight=merge#pandas.DataFrame.merge
[7] pivot_table(): http://pandas.pydata.org/pandas-docs/stable/generated/pandas.tools.pivot.pivot_table.html#pandas.tools.pivot.pivot_table
[8] Источник: http://habrahabr.ru/post/196980/
Нажмите здесь для печати.