Несоответствия в использовании памяти Pandas - PullRequest
0 голосов
/ 04 сентября 2018

У меня есть некоторые несоответствия памяти, когда я использую Pandas DataFrame.

Вот мой скелет кода:

import pandas as pd
import numpy as np

columns_dtype = {'A': np.int16, 'B': np.int8, ...}
df = pd.read_csv('my_file.csv', dtype=columns_dtype)

Это просто чтение csv-файла с пандами при управлении типами данных столбцов. Но затем, когда я ищу, сколько памяти выделено для моей программы, информация не кажется последовательной.

Информация 1:

df.info(memory_usage='deep')

Это дает: memory usage: 482.6 MB

Информация 2:

import dill, sys
sys.getsizeof(dill.dumps(df))

Это дает: 506049782 (т. Е. 506 Мб)

Информация 3:

Объем оперативной памяти, выделенный моей программе: 1,1 ГиБ (или 1,2 Гб)

Дополнительная информация (но я не думаю, что это актуально):

размер my_file.csv составляет 888 Мб (ls -lh)

Выпуск:

Поскольку я просто загружаю свой CSV-файл в объект Pandas DataFrame, почему моей программе требуется более 1 ГБ ОЗУ, тогда как размер объекта составляет около 0,5 ГБ?

Большое спасибо

1 Ответ

0 голосов
/ 06 февраля 2019

Я не собираюсь притворяться, что знаю глубокое использование динамической памяти для хранения данных в Pandas. Pandas голоден, когда загружает большие плоские файлы. Как правило, pandas будет использовать 5-10-кратное количество оперативной памяти в качестве размера файла, который вы загружаете для анализа.

Чтобы избежать этого, вы можете разделить данные на части при загрузке:

  df = pd.load_csv(file_path, chunksize = 30000)

или если вы выполняете анализ по столбцам:

  df = pd.load_csv(file_path, usecols = list_of_columns_index)

или оба!

  df = pd.load_csv(file_path, chunksize = 30000, usecols = list_of_columns_index)

Надеюсь, это поможет ускорить ваш анализ.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...