{ "cells": [ { "cell_type": "markdown", "metadata": {}, "source": [ "# pandas\n", "\n", "Удобную шпаргалку по pandas можно найти [здесь](https://pandas.pydata.org/Pandas_Cheat_Sheet.pdf).\n", "\n", "## О pandas\n", "\n", "[pandas](https://pandas.pydata.org/) ([panel data](https://en.wikipedia.org/wiki/Panel_data), [панельных данных](https://ru.wikipedia.org/wiki/%D0%9F%D0%B0%D0%BD%D0%B5%D0%BB%D1%8C%D0%BD%D1%8B%D0%B5_%D0%B4%D0%B0%D0%BD%D0%BD%D1%8B%D0%B5)) --- python библиотека для работы с таблицами и временными рядами. \n", "\n", "pandas --- сторонняя библиотека, но входит в дистрибутив `anaconda`.\n", "\n", "```console\n", "conda install pandas\n", "```\n", "или \n", "```console\n", "pip install anaconda\n", "```\n", "\n", "При импортировании `pandas` часто пользуются псевдонимом `pd`:\n", "```python\n", "import pandas as pd\n", "```\n", "\n", "Базовый туториал по работе с библиотекой от разработчиков можно найти [здесь](https://pandas.pydata.org/docs/getting_started/intro_tutorials/01_table_oriented.html#min-tut-01-tableoriented)." ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "## Основные объекты pandas\n", "\n", "Удобно думать об объектах `pandas` в иерархии: таблицы --- контейнер, содержащий более простые объекты --- столбцы, которые в свою очередь содержат ещё более простые объекты --- значения (единицу данных).\n", "\n", "### pandas.DataFrame\n", "\n", "[DataFrame](https://pandas.pydata.org/docs/reference/api/pandas.DataFrame.html#pandas.DataFrame) --- двумерная структура данных, которая может хранить данные разных типов в столбцах. \n", "\n", "```{figure} /_static/lecture_specific/pandas/dataframe.svg\n", "```\n", "\n", "Больше всего `DataFrame` напоминает лист (`SpreadSheet`) из `Excel` таблицы или `SQL` таблицу. Объекты `DataFrame` изменяемы, но с некоторыми ограничениями. Можно изменять значения в ячейках таблицы, добавлять новые столбцы на месте, но для добавления строк придется создать новый объект. Ниже приведен пример таблицы `pandas`, созданной из `python` словаря.\n" ] }, { "cell_type": "code", "execution_count": 2, "metadata": {}, "outputs": [ { "data": { "text/html": [ "
\n", "\n", "\n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", " \n", "
NameAgeSex
0Ivan22male
1Alex35male
2Jane58female
\n", "
" ], "text/plain": [ " Name Age Sex\n", "0 Ivan 22 male\n", "1 Alex 35 male\n", "2 Jane 58 female" ] }, "execution_count": 2, "metadata": {}, "output_type": "execute_result" } ], "source": [ "import pandas as pd\n", "\n", "\n", "# Создание таблицы из словаря. \n", "# Ключи словаря используются в качестве названий столбцов\n", "# Значения используются в качестве содержимого таблицы\n", "df = pd.DataFrame(\n", " {\n", " \"Name\": [\n", " \"Ivan\",\n", " \"Alex\",\n", " \"Jane\",\n", " ],\n", " \"Age\": [22, 35, 58],\n", " \"Sex\": [\"male\", \"male\", \"female\"],\n", " }\n", ")\n", "\n", "df" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "\n", "### pandas.Series\n", "\n", "Каждый столбец `DataFrame` --- [Series](https://pandas.pydata.org/docs/reference/api/pandas.Series.html#pandas.Series). Тип данных может отличаться в разных столбцах `DataFrame` объекта (таблицы), но должен быть одинаковым для всех значений `Series` объекта (столбца). \n", "\n", "```{figure} /_static/lecture_specific/pandas/series.svg\n", "```\n", "\n", "Объект `pandas.Series` может существовать и вне таблицы (`DataFrame`). В целом он похож на одномерный `numpy.ndarray`, но имеет расширенный индекс. Ниже приводится пример создания `pd.Series` из списка целых чисел, которому в качестве индекса присваиваются строки.\n" ] }, { "cell_type": "code", "execution_count": 16, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Ivan 22\n", "Alex 35\n", "Jane 58\n", "dtype: int64" ] }, "execution_count": 16, "metadata": {}, "output_type": "execute_result" } ], "source": [ "# Создание pd.Series из списка\n", "# В качестве индекса указывается массив строк\n", "age = pd.Series(\n", " [22, 35, 58], \n", " index=[\n", " \"Ivan\", \n", " \"Alex\", \n", " \"Jane\"\n", " ]\n", ")\n", "\n", "age" ] }, { "cell_type": "markdown", "metadata": {}, "source": [ "\n", "### pandas.index\n", "\n", "Главным отличием от `numpy.ndarray` заключается в том, что и `DataFrame` и `Series` индексированы специальным объектом [pd.index](https://pandas.pydata.org/docs/reference/api/pandas.Index.html). Благодаря этому датафреймы и серии можно удобно и эффективно индексировать не только целочисленным смещением, как в `NumPy`, но и строковыми значениями, датами, временными рядами и любыми другими хэшируемыми объектами. В этом отношении объекты `pandas` похожи на словари, так как они позволяют быстрый доступ к данным по индексу (как бы ключу), но в отличие от словарей \n", "\n", "1. индекс может повторяться для разных строк таблицы/столбца (у словарей ключи уникальны);\n", "2. объекты pandas упорядочены, т.е. можно быстро получать доступ к значениям и по смещению (словари не упорядоченные объекты).\n", "\n", "Кроме того, такая индексация позволяет без особых усердий со стороны программиста выравнивать данные из разных источников. Ниже выводятся индексы созданных ранее объектов `pandas`. Индекс таблицы сгенерировался автоматически, т.к. не был явно указан при создании. Индекс столбца соответствует переданным при создании объекта значениям. " ] }, { "cell_type": "code", "execution_count": 17, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "RangeIndex(start=0, stop=3, step=1)" ] }, "execution_count": 17, "metadata": {}, "output_type": "execute_result" } ], "source": [ "df.index" ] }, { "cell_type": "code", "execution_count": 18, "metadata": {}, "outputs": [ { "data": { "text/plain": [ "Index(['Ivan', 'Alex', 'Jane'], dtype='object')" ] }, "execution_count": 18, "metadata": {}, "output_type": "execute_result" } ], "source": [ "age.index" ] } ], "metadata": { "interpreter": { "hash": "cd49b4596bae9c980ff74fdf93e8fe80e447435ae307c062fad6c4f9ef2eb47f" }, "kernelspec": { "display_name": "Python 3.8.10 64-bit ('venv': venv)", "language": "python", "name": "python3" }, "language_info": { "codemirror_mode": { "name": "ipython", "version": 3 }, "file_extension": ".py", "mimetype": "text/x-python", "name": "python", "nbconvert_exporter": "python", "pygments_lexer": "ipython3", "version": "3.8.10" }, "orig_nbformat": 4 }, "nbformat": 4, "nbformat_minor": 2 }