Почему getsizeof(pandas.DataFrame) отличается от файла на компьютере?

#python #pandas #size

#python #pandas #размер

Вопрос:

Я получил 2 csv-файла: размер file1 594,8 МБ, file2 1,0 ГБ

Но когда я пишу

 df1 = pd.read_csv(file1)
df2 = pd.read_csv(file2)
print(sys.getsizeof(df1))
print(sys.getsizeof(df2))
  

Я получаю:

 457048830
460467614
  

Почему размер файла DataFrame IS так отличается от размера файла CSV?

И почему соотношение между 594,8 МБ и 1,0 ГБ (размер файла) и 457048830 и 460467614 не совпадает? (Или это то же самое, но так, что это такое?)

Ответ №1:

CSV-файл кодирует числа текстовым способом, разделяя их запятыми. То есть 10-значное число займет 10 байт данных. Это означает, что в зависимости от размера чисел, n числа могут занимать от 2n байтов до произвольного количества.

A DataFrame загружает данные в целые числа, которые (как правило) хранятся более эффективными способами. Распространенным форматом является 32-разрядный формат с плавающей запятой, в котором каждое число хранится с использованием 4 байт.

Исходя из вышесказанного, я бы ожидал, что file1 и file2 примерно такое же количество чисел, но file2 содержит (как правило) числа, для представления которых требуется больше текста.

Например, два файла содержат 1, 2, 3, 4, ..., 100 и 1.0001, 1.0002, 1.0003, ..., 1.0100 оба содержат 100 чисел и будут примерно одинакового размера в Python. Однако при сохранении в виде текстового CSV последний будет намного больше.