To optimization load DataFrame from databases
Project description
Pandas-sql-loader
Модуль, реализующий функцию sql_load, которая копирует функционал
функции pandas.read_sql(), но оптимизирует потребление памяти.
Пытается проставить минимально возможный тип данных для каждого столбца.
(float64 -> float16, int64 -> uint8 и т.д)
Интерфейс метода полностью совместим с pandas.read_sql(), однако присутствуют дополнительные опциональные параметры.
sql_load interface
sql_load(sql,
con,
index_col=None,
coerce_float=True,
params=None,
parse_dates=None,
columns=None,
chunksize=None,
need_downcast=False,
column_types=None,
iterator=True)
Все стандартные параметры есть в документации, опишу только новые и chunksize:
chunksize: int, default None
Если задан, то:
- если iterator=True, тогда вернет вернет итератор
- если iterator=False, тогда чанками загрузит датафреймы, объединит их в один и вернет его как результат.
need_downcast: bool, default False
Флаг, устанавливающий нужна оптимизация памяти или нет.
column_types: list, default None
Список numpy типов, к которым нужно привести столбцы.
Если в столбце есть значение, превыщающее заданный тип, то тип будет проигнорирован.
Если длина списка меньше, чем кол-во столбцов, то список будет автоматически
расширен типами uint8.
Если не задан, то каждый столбец попытается привести к uint8.
На самом дел довольно бесполезная штука. Изначально думал, что даункаст будет сильно медленнее стандартного метода, но на деле плюс минус одинаково. Возможно, в следующих версиях будет приводить к данным типам насильно?
iterator: bool, default True
Флаг, устанавливающий должен ли вернуться итератор или уже собранный из чанков DataFrame при установленном chunksize.
Рекомендация
Для датасетов, размер которых в полтора раза меньше чем доступная память и более, настоятельно рекомендуется использовать загрузку чанками, тк прежде чем сдаункастить типы, в память будет загружен DataFrame средствами самого пандас (т.е. с жирными типами)
Пример
Чтобы получить готовый оптимизированный DataFrame, но загруженный чанками:
df = sql_load(query, con, chunksize=10000, need_downcast=True, iterator=False)
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Hashes for pd_sql_loader-1.4.1-py3-none-any.whl
Algorithm | Hash digest | |
---|---|---|
SHA256 | ce1d4e5c8c58e3893d71e42a7beef63c9a74437b67e0dd4b3b96d91ee5eaea9f |
|
MD5 | d6877a7689b2c0737f3569838c67a3a5 |
|
BLAKE2b-256 | 25c3ad1f3d4206c1c9f44ed1b76342a35b81bebbf21ecff833c1ee569a32f2dd |