Комментарии 2
А вы сравнивали типы данных столбцов внутри датафрейма?
При загрузке данных из базы pandas, скорее всего, приводит типы к тем, что задано в таблице. Сказано Int64 - оно его и возьмёт.
А при загрузке из csv типы не указываются и pandas может просто взять Int8, если в него поместятся все значения.
Может быть это и есть магия?
Добрый день.
Типы данных сравнивал. В моем случае различия были для полей 'store_id', 'user_id', 'product_id', которые в БД хранятся как строковые и при выгрузке из БД остались строковыми, а при выгрузке из файла стали 'int64'.
Поле же 'quantity' и при выгрузке из БД, и при выгрузке из файла имеет тип 'int64', в 'int8' данные не преобразовывались.

В статье речь идет об интернировании, которое можно применить к строковым типам. Как видите при способе "Выгрузка из БД с интернированием" не применяется преобразование числовых типов, а происходит только интернирование строковых данных, за счет чего достигается эффект.
Суть больше не в том, что при выгрузке из файла меньший размер (это служило лишь основанием усомниться в объеме выгружаемых данных из БД), а в том, что можно значительно сэкономить память при выгрузке данных из БД.
Вы описываете хороший способ экономии памяти через понижение размерности числовых типов, который также стоит применять для достижения лучшего эффекта.
Экономия RAM с pandas.read_sql