Почему импорт csv в Python или R удваивает размер

#python #csv #pandas #kaggle

#python #csv #панды #kaggle

Вопрос:

Вероятно, это хорошо известный ответ …. но почему файл (csv) размером 11 ГБ становится более чем в два раза больше при импорте в Python (Pandas) или R?

Данные, о которых идет речь, взяты из соревнования Kaggle, размер которого при распаковке составляет 11 ГБ (файл train). Когда я загружаю его в python или R, он занимает более чем в два раза больше места. У меня 32 ГБ оперативной памяти в Windows (при загрузке файла освобождается ~ 29), и мне почти не хватает места.

В Python:

 import pandas as pd
train=pd.read_csv("C:\Users\train.csv")
  

В R:

 train<-read.csv(file="C:\train.csv",header=TRUE)
  

Комментарии:

1. Я предполагаю, что из-за типов данных попробуйте принудительно использовать 32-битные числа с плавающей запятой

2. Есть ли способ сделать это легко?

Ответ №1:

Сериализованные данные и данные в памяти отличаются по структуре

Сериализация данных на диск (например, в файл CSV) — довольно простая задача, она должна поддерживать только запись данных и чтение их предсказуемым способом. Единственное правило, которому нужно следовать, — использовать четко определенный формат.

С другой стороны, данные, загружаемые в ОЗУ для обработки, часто растут по нескольким причинам:

  • все числа имеют одинаковый размер в байтах, и для соответствия всем ожидаемым значениям количество байтов больше, чем необходимо для большинства чисел.
  • в 64-разрядных версиях программ минимальный объем выделенной памяти ограничен — снизу, поэтому даже самые простые данные занимают больше данных, чем необходимо, только для устранения причины, заданной ОС
  • часто существуют вспомогательные структуры (например, для хэшей / словарей есть своего рода индекс)

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