Python Pandas SQL запросы

Pandas DataFrame — давно зарекомендовал себя как стандартная табличная структура хранения данных в экосистеме данных Python. Использование Pandas DataFrame предоставляет свои собственные спецификациями для доступа, манипулирования и выполнения вычислений с различными данными, которые можно освоить со временем  благодаря их соответствию синтаксису Python; если вы хорошо знакомы с Python, вы уже на пути к освоению стандартного API Pandas.
Установка и подготовка
 
Если вы хотите установить полную библиотеку Fugue, чтобы воспользоваться всеми ее методами по распараллеливанию, вы должны использовать следующую команду:

pip install fugue
Если  вам нужен только FugueSQL API — а это все, что требуется для примеров в этой статье — используйте команду:
pip install fugue[sql]
После установки импортируйте необходимые библиотеки:
import pandas as pd
from fugue_sql import fsql
Все, что нужно сделать, — это создать DataFrame, который мы будем использовать для запросов в наших примерах. Давайте продолжим и создадим простой набор данных различных комиксов.

Простой DataFrame будет состоять из 4 столбцов: конкретный выпуск названия комикса; издатель комиксов; профессиональная и независимая оценка комиксов (по 10-балльной шкале); ценность комикса в присвоенном ему классе.

Вот код для выполнения того, что изложено выше:
comics_df = pd.DataFrame({'book': ['Secret Wars 8',
                                   'Tomb of Dracula 10',
                                   'Amazing Spider-Man 252',
                                   'New Mutants 98',
                                   'Eternals 1',
                                   'Amazing Spider-Man 300',
                                   'Department of Truth 1'],
                          'publisher': ['Marvel', 'Marvel', 'Marvel', 'Marvel', 'Marvel', 'Marvel', 'Image'],
                          'grade': [9.6, 5.0, 7.5, 8.0, 9.2, 6.5, 9.8],
                          'value': [400, 2500, 300, 600, 400, 750, 175]})

print(comics_df)
                    book publisher  grade  value
0           Secret Wars 8    Marvel    9.6    400
1      Tomb of Dracula 10    Marvel    5.0   2500
2  Amazing Spider-Man 252    Marvel    7.5    300
3          New Mutants 98    Marvel    8.0    600
4              Eternals 1    Marvel    9.2    400
5  Amazing Spider-Man 300    Marvel    6.5    750
6   Department of Truth 1     Image    9.8    175
Пример 1. Какие из комиксов имеют оценку выше 8.0?
 
Название раздела говорит само за себя. Мы собираемся использовать FugueSQL и стандартный оператор SELECT, чтобы запросить из DataFrame Pandas м определить, какие из комиксов имеют оценку выше 8,0 по 10-балльной шкале.

Для этого нам сначала нужно определить оператор SQL:
# which of my books are graded above 8.0?
query_1 = """
SELECT book, publisher, grade, value FROM comics_df
WHERE grade > 8.0
PRINT
"""
После определения запроса его необходимо выполнить с помощью запросов Fugue:
fsql(query_1).run()
И вот наш возвращенный запрос:
PandasDataFrame
book:str                                                      |publisher:str|grade:double|value:long
--------------------------------------------------------------+-------------+------------+----------
Secret Wars 8                                                 |Marvel       |9.6         |400       
Eternals 1                                                    |Marvel       |9.2         |400       
Department of Truth 1                                         |Image        |9.8         |175       
Total count: 3
В нашем DataFrame есть 3 книги с оценкой выше 8.0: Secret Wars 8; Eternals 1; и Department of Truth 1.

 Это сработало! Очень круто и, если вы знакомы с синтаксисом SQL, все очень просто.

Пример 2. Какие из моих комиксов стоят выше 500 долларов?
 
Давайте посмотрим на второй пример, где мы выясним, какие из этих книг стоят выше 500 долларов.

Опять же, сначала мы определим запрос SQL, а затем выполним его с помощью механизма FugueSQL.
query_2 = """
SELECT book, publisher, grade, value FROM comics_df
WHERE value > 500
PRINT
"""

fsql(query_2).run()

Результат:

PandasDataFrame
book:str                                                      |publisher:str|grade:double|value:long
--------------------------------------------------------------+-------------+------------+----------
Tomb of Dracula 10                                            |Marvel       |5.0         |2500      
New Mutants 98                                                |Marvel       |8.0         |600       
Amazing Spider-Man 300                                        |Marvel       |6.5         |750       
Total count: 3
Пример 3. Какие из комиксов опубликованы компанией Image?
 
Для нашего последнего примера давайте посмотрим, какие из этих комиксов были опубликованы Image Comics.

query_3 = """
SELECT book, publisher, grade, value FROM comics_df
WHERE publisher = 'Image'
PRINT
"""

fsql(query_3).run()

Результат:

PandasDataFrame
book:str                                                      |publisher:str|grade:double|value:long
--------------------------------------------------------------+-------------+------------+----------
Department of Truth 1                                         |Image        |9.8         |175       
Total count: 1
 
Дополнительные примеры см. в этом руководстве по FugueSQL: https://fugue-tutorials.readthedocs.io/en/latest/tutorials/beginner/index.html

Ответить