Spec-Zone.ru › pandas 0.24

Часто задаваемые вопросы (FAQ)

Использование памяти DataFrame

Использование памяти DataFrame (включая индекс) отображается при вызове info(). Параметр конфигурации display.memory_usage (см. список параметров) определяет, будет ли отображаться использование памяти DataFrame при вызове метода df.info().

Например, использование памяти DataFrame ниже отображается при вызове info():

In [1]: dtypes = ['int64', 'float64', 'datetime64[ns]', 'timedelta64[ns]',
   ...:           'complex128', 'object', 'bool']
   ...: 

In [2]: n = 5000

In [3]: data = {t: np.random.randint(100, size=n).astype(t) for t in dtypes}

In [4]: df = pd.DataFrame(data)

In [5]: df['categorical'] = df['object'].astype('category')

In [6]: df.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 5000 entries, 0 to 4999
Data columns (total 8 columns):
int64              5000 non-null int64
float64            5000 non-null float64
datetime64[ns]     5000 non-null datetime64[ns]
timedelta64[ns]    5000 non-null timedelta64[ns]
complex128         5000 non-null complex128
object             5000 non-null object
bool               5000 non-null bool
categorical        5000 non-null category
dtypes: bool(1), category(1), complex128(1), datetime64[ns](1), float64(1), int64(1), object(1), timedelta64[ns](1)
memory usage: 289.1+ KB

Символ + указывает, что фактическое использование памяти может быть выше, так как pandas не учитывает память, используемую значениями в столбцах с dtype=object.

Передача memory_usage='deep' позволит получить более точный отчет об использовании памяти, учитывая полное использование содержащихся объектов. Это необязательно, так как может быть дорогостоящим с точки зрения производительности.

In [7]: df.info(memory_usage='deep')
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 5000 entries, 0 to 4999
Data columns (total 8 columns):
int64              5000 non-null int64
float64            5000 non-null float64
datetime64[ns]     5000 non-null datetime64[ns]
timedelta64[ns]    5000 non-null timedelta64[ns]
complex128         5000 non-null complex128
object             5000 non-null object
bool               5000 non-null bool
categorical        5000 non-null category
dtypes: bool(1), category(1), complex128(1), datetime64[ns](1), float64(1), int64(1), object(1), timedelta64[ns](1)
memory usage: 425.6 KB

По умолчанию параметр отображения установлен в True, но его можно явно изменить, передав аргумент memory_usage при вызове df.info().

Использование памяти каждого столбца можно найти, вызвав метод memory_usage(). Это возвращает Series с индексом, представленным именами столбцов, и объемом памяти каждого столбца в байтах. Для DataFrame выше, использование памяти каждого столбца и общее использование памяти можно найти с помощью метода memory_usage:

In [8]: df.memory_usage()
Out[8]: 
Index                 80
int64              40000
float64            40000
datetime64[ns]     40000
timedelta64[ns]    40000
complex128         80000
object             40000
bool                5000
categorical        10920
dtype: int64

# total memory usage of dataframe
In [9]: df.memory_usage().sum()

© 2008–2012, AQR Capital Management, LLC, Lambda Foundry, Inc. and PyData Development Team
Licensed under the 3-clause BSD License.
https://pandas.pydata.org/pandas-docs/version/0.24.2/user_guide/gotchas.html

Spec-Zone.ru

Настройки Оффлайн Что нового Помощь О нас
Spec-Zone .ru
спецификации, руководства, описания, API