Как ввести таблицу в питоне
Перейти к содержимому

Как ввести таблицу в питоне

  • автор:

Таблицы pandas #

pandas.DataFrame — по сути дела таблица, на которую можно смотреть как на объединение столбцов pandas.Series с выравниванием по общему индексу.

s1 s2
a 1 NaN
b 2 two
c <NA> three

Таблицы изменяемы с точки зрения содержимого их ячеек, но лишь частично изменяемы с точки зрения размера: добавлять на месте можно только столбцы, но не строки.

Создание таблицы#

Как и в случае со столбцами, есть множество способов создать таблицу pandas из уже существующих объектов python . Большинство из них опираются на конструктор pandas.DataFrame.

Список списков или двухмерный массив NumPy #

Если ваши данные хранятся в виде списка списков, то на выходе каждый вложенный список будет соответствовать строке таблице.

0 1 2
0 a11 a12 a13
1 a21 a22 a23

По умолчанию генерируется RangeIndex и для строк и для столбцов таблицы.

Опциональными параметрами конструктора columns и index можно указать пользовательские значения.

column 1 column 2 column 3
row 1 a11 a12 a13
row 2 a21 a22 a23

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

column 1 column 2 column 3
row 1 a11 a12 a13
row 2 a21 a22 a23

Словарь#

Один самых удобных способов создавать таблицу в pandas — использовать словари.

Тут возможно два варианта.

ключи словаря — названия столбца, значение по ключу — содержимое соответствующего столбца;

ключи словаря — метки строк, значение по ключу — содержимое соответствующей строки.

По столбцам#

Первый вариант гораздо более распространен, поэтому его рассмотрим первым. Итак, ключи словаря станут названиями столбцов, значение по ключу — станет содержимым с соответствующим значением.

Будущие столбцы в словари могут быть представлены списком, массивом NumPy , а также столбцом pandas . При этом в случае списков и массивов NumPy накладывается требование на одинаковую длину всех столбцов, а также автоматически генерируется RangeIndex, если он не указан в явном виде опциональным параметром index .

column 1 column 2 column 3
a a11 a21 a31
b a21 a22 a32

Если же содержимое будущих столбцов представлено в виде столбцов pandas , то индекс таблицы генерируется из индексов этих столбцов, а ограничение на одинаковую длину столбцов снимается: строки таблицы выравниваются по индексу.

column 1 column 2 column 3
a 1.0 4 5
b 2.0 3 6
c NaN <NA> 7
По строкам#

Статический метод pandas.DataFrame.form_dict — более специализированный метод для создания таблицы из словаря. В примерах из предыдущего раздела этот метод сработает точно также, как и базовый конструктор класса, но наличие дополнительного опционального параметра orient ( orientation ) позволяет создавать таблицу из строк.

Если указать в качестве orient строку index , то ключи словаря будут восприниматься в качестве меток строк, а значение по ключу — содержимое строки с соответствующей меткой. Все остальное продолжает работать также, но с заменой меток и названий столбцов местами.

column 1 column 2
row1 1 2
row2 4 3

Чтение таблиц с жесткого диска#

Библиотека pandas позволяет свободно оперировать с таблицами в формате csv , json , таблицами excel (потребуется установка дополнительной библиотеки, например, openpyxl), а также более продвинутыми бинарными форматами hdf5, apache parquet и многими другими форматами. Формат csv — один из самых простых и распространенных в научной среде, поэтому рассмотрим чтение таблиц средствами pandas именно на его примере.

Все таблицы из этой лекции хранятся в репозитории с исходниками этого ресурса в папке по ссылке.

Предположим следующее содержимое хранится в текстовом файле planets.csv со следующим содержимым.

Для чтения такой таблицы используется метод read_csv.

Название Количество спутников Масса Группа Кольца
0 Меркурий 0 0.0055 земная группа Нет
1 Венера 0 0.8150 земная группа Нет
2 Земля 1 1.0000 земная группа Нет
3 Марс 2 0.1070 земная группа Нет
4 Юпитер 62 317.8000 газовый гигант Да

В самом простом варианте использования функции read_csv

имена столбцов распознаются из первой строки файла (параметром header можно повлиять на это);

в качестве индекса генерируется RangeIndex (параметром index_col можно выбрать столбец индекса таблицы);

в качестве разделителя ожидается символ запятой “ , ” (параметром sep можно на это повлиять);

пропущенные значения заполняются значением “ np.nan ” (параметром na_values можно указать, какие ещё значения интерпретировать, как пропущенные);

столбцы с датами не распознаются (смотри страницу “ Дата и время ”).

Метод DataFrame.head возвращает первые n строк таблицы. По умолчанию n равно 5, но можно указать явно и другое значение. Похожий по смыслу метод DataFrame.tail возвращает последние n строк.

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

Считаем эту таблицу ещё раз, указав в этот раз в качестве индекса столбец "Название" .

Количество спутников Масса Группа Кольца
Название
Меркурий 0 0.0055 земная группа Нет
Венера 0 0.8150 земная группа Нет
Земля 1 1.0000 земная группа Нет
Марс 2 0.1070 земная группа Нет
Юпитер 62 317.8000 газовый гигант Да
Сатурн 34 95.2000 газовый гигант Да
Уран 27 14.3700 ледяной гигант Да
Нептун 13 17.1500 ледяной гигант Да

Аналогично можно считывать данные из таблиц excel методом read_excel.

Методами to_csv и to_excel можно сохранить DataFrame в таблицу удобном формате (для сохранения в excel необходимо поставить библиотеку openpyxl или её аналоги).

Индексация#

Строки#

Для получения строк таблицы используются те же самые .loc и iloc (метки и порядковый номер соответственно).

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

Простые квадратные скобки “ [] ” не индексируют таблицу по строкам!

Столбцы#

Для получения столбца используется оператор “ [] ”.

Если в названии столбца нет пробелов и оно не совпадает ни с одним методом класса pandas.DataFrame , то можно использовать точечную нотацию. Хотя, конечно, в случае кириллицы это выглядит странно.

https://amdy.su/wp-admin/options-general.php?page=ad-inserter.php#tab-8

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

А вы знаете о том, что в Python есть встроенная СУБД?

Если вы — программист, то я полагаю, что вы, наверняка, знаете о существовании чрезвычайно компактной и нетребовательной к ресурсам СУБД SQLite, или даже пользовались ей. Эта система обладает практически всеми возможностями, которых можно ожидать от реляционной СУБД, но при этом всё хранится в единственном файле. Вот некоторые сценарии использования SQLite, упомянутые на официальном сайте этой системы:

  • Встраиваемые устройства и IoT.
  • Анализ данных.
  • Перенос данных из одной системы в другую.
  • Архивирование данных и (или) упаковка данных в контейнеры.
  • Хранение данных во внешней или временной БД.
  • Заменитель корпоративной БД, используемый в демонстрационных или испытательных целях.
  • Обучение, освоение начинающими практических приёмов работы с БД.
  • Прототипирование и исследование экспериментальных расширений языка SQL.

Данный материал посвящён использованию SQLite в Python-разработке. Поэтому для нас особенно важно то, что эта СУБД, представленная модулем sqlite3 , входит в стандартную библиотеку языка. То есть оказывается, что для работы с SQLite из Python-кода не нужно устанавливать некое клиент-серверное ПО, не нужно поддерживать работу какого-то сервиса, отвечающего за работу с СУБД. Достаточно лишь импортировать модуль sqlite3 и приступить к его использованию в программе, получив в своё распоряжение систему управления реляционными базами данных.

Импорт модуля

Выше я говорил о том, что SQLite — это СУБД, встроенная в Python. Это значит, что для того чтобы приступить к работе с ней, достаточно импортировать соответствующий модуль, не выполняя предварительно его установку с помощью команды вроде pip install . Команда импорта SQLite выглядит так:

Создание подключения к БД

Для организации подключения к базе данных SQLite не нужно беспокоиться об установке драйверов, о подготовке строк подключения и о прочих подобных вещах. Создать базу данных и получить в своё распоряжение объект подключения к ней можно очень просто и быстро:

Выполнив эту строку кода, мы создадим базу данных и подключимся к ней. Дело тут в том, что база данных, к которой мы подключаемся, пока не существует, поэтому система автоматически создаёт новую пустую БД. Если же база данных уже создана (предположим, это my-test.db из предыдущего примера), для того чтобы к ней подключиться, достаточно воспользоваться точно таким же кодом.

Файл только что созданной базы данных

Создание таблицы

Теперь давайте создадим таблицу в нашей новой БД:

Тут описано добавление в БД таблицы USER с тремя столбцами. Как видите, SQLite — это и правда очень простая в работе СУБД, но она обладает всеми основными возможностями, наличия которых можно ожидать от обычной системы управления реляционными базами данных. Речь идёт о поддержке типов данных, в том числе — типов, допускающих значение null , о поддержке первичного ключа и автоинкремента.

Если этот код функционирует так, как ожидается (вышеприведённая команда, правда, ничего не возвращает), в нашем распоряжении окажется таблица, готовая к дальнейшей работе с ней.

Вставка записей в таблицу

Вставим несколько записей в таблицу USER , которую мы только что создали. Это, кроме прочего, даст нам доказательство того, что таблица, и правда, была создана вышеприведённой командой.

Представим, что нам нужно добавить в таблицу несколько записей одной командой. В SQLite сделать это очень просто:

Здесь нам нужно определить SQL-выражение со знаками вопроса ( ? ) в виде местозаполнителей. Учитывая то, что в нашем распоряжении есть объект подключения к базе данных, мы, подготовив выражение и данные, можем вставить записи в таблицу:

Сообщений об ошибках после выполнения этого кода не поступает, а это значит, что данные успешно добавлены в таблицу.

Выполнение запросов к базе данных

Теперь пришло время узнать о том, правильно ли отработали команды, которые мы только что выполняли. Давайте выполним запрос к БД и попробуем получить из таблицы USER какие-то данные. Например — получим записи, относящиеся к пользователям, возраст которых не превышает 22 года:

Результат выполнения запроса к БД

Как видите, то, что было нужно, получить удалось. И сделать это было очень просто.

Кроме того, даже хотя SQLite — простая СУБД, она отличается крайне широкой поддержкой. Поэтому с ней можно работать, используя большинство SQL-клиентов.

Я пользуюсь DBeaver. Предлагаю взглянуть на то, как это выглядит.

Подключение к базе данных SQLite из SQL-клиента (DBeaver)

Я пользуюсь облачным сервисом Google Colab и хочу загрузить файл my-test.db на свой компьютер. Если же вы экспериментируете с SQLite на компьютере, то это значит, что вы, без необходимости скачивать откуда-то файл базы данных, можете подключиться к ней, используя SQL-клиент.

В случае с DBeaver для подключения к БД SQLite нужно создать новое подключение и выбрать, в качества типа базы данных, SQLite.

Подготовка подключения в DBeaver

Затем надо найти файл базы данных.

Подключение файла базы данных

После этого можно выполнять SQL-запросы к базе данных. Тут нет ничего особенного, отличающегося от работы с обычными реляционными БД.

Выполнение запросов к базе данных

Интеграция с pandas

Думаете, на этом мы завершим разговор о поддержке SQLite в Python? Нет, нам ещё есть о чём поговорить. А именно, так как SQLite — это стандартный Python-модуль, эта СУБД легко интегрируется с дата-фреймами pandas.

Датафрейм pandas

Для сохранения датафрейма в БД можно просто воспользоваться его методом to_sql() :

Вот и всё! Нам даже не нужно заранее создавать таблицу. Типы данных и характеристики полей будут настроены автоматически, на основании характеристик датафрейма. Конечно, вы, если надо, можете настроить всё самостоятельно.

Теперь, предположим, нам нужно получить объединение таблиц USER и SKILL и записать полученные данные в датафрейм pandas. Это тоже очень просто:

Чтение данных из БД в датафрейм pandas

Замечательно! А теперь давайте запишем то, что у нас получилось, в новую таблицу с именем USER_SKILL :

С этой таблицей, конечно, можно работать и пользуясь SQL-клиентом.

Применение SQL-клиента для работы с базой данных

Итоги

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

Здесь я рассказал о том, как использовать встроенную в Python библиотеку sqlite3 для создания баз данных и для работы с ними. Конечно, такие БД поддерживают не только операцию добавления данных, но и операции изменения и удаления информации. Полагаю, вы, узнав о sqlite3 , испытаете всё это сами.

Очень важно то, что SQLite отлично стыкуется с pandas. Данные из БД очень легко считывать, помещая в датафреймы. Не менее проста и операция по сохранению содержимого датафреймов в базу данных. Это ещё сильнее упрощает использование SQLite.

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

Как ввести таблицу в питоне

In this article, we are going to discuss how to make a table in Python. Python provides vast support for libraries that can be used for creating different purposes. In this article we will talk about two such modules that can be used to create tables.

Method 1: Using Tabulate module

The tabulate() method is a method present in the tabulate module which creates a text-based table output inside the python program using any given inputs. It can be installed using the below command

How to Easily Create Tables in Python

How to use the tabulate function to create nicely-formatted tables in Python

Luay Matalka

Towards Data Science

Towards Data Science

Being able to quickly organize our data into a more readable format, such as when data wrangling, can be extremely helpful in order to analyze the data and plan the next steps. Python offers the ability to easily turn certain tabular data types into nicely formatted plain-text tables, and that’s with the tabulate function.

install tabulate

We first install the tabulate library using pip install in the command line:

import tabulate function

We then import the tabulate function from the tabulate library in our code:

And now we are ready to use the tabulate function!

tabular data types supported by tabulate

The tabulate function can transform any of the following into an easy to read plain-text table: (from the tabulate documentation)

  • list of lists or another iterable of iterables
  • list or another iterable of dicts (keys as columns)
  • dict of iterables (keys as columns)
  • two-dimensional NumPy array
  • NumPy record arrays (names as columns)
  • pandas.DataFrame

list of lists

For example, if we have the following list of lists:

We can turn it into into a much more readable plain-text table using the tabulate function:

Since the first list in the list of lists contains the names of columns as its elements, we can set it as the column or header names by passing ‘firstrow’ as the argument for the headers parameter:

The tabulate function also contains a tablefmt parameter, which allows us to improve the appearance of our table using pseudo-graphics:

I prefer to use the ‘fancy_grid’ argument for tablefmt:

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *