Skip to content

Commit 207bc74

Browse files
committed
Define memory_usage on SparseArray
1 parent 21ae147 commit 207bc74

File tree

2 files changed

+41
-5
lines changed

2 files changed

+41
-5
lines changed

pandas/core/base.py

+4-4
Original file line numberDiff line numberDiff line change
@@ -1070,10 +1070,10 @@ def memory_usage(self, deep=False):
10701070
numpy.ndarray.nbytes
10711071
"""
10721072
# Use sparse values if they exist for memory consumption
1073-
if hasattr(self.values, 'sp_values'):
1074-
values = self.values.sp_values
1075-
else:
1076-
values = self.values
1073+
# if hasattr(self.values, 'sp_values'):
1074+
# values = self.values.sp_values
1075+
# else:
1076+
values = self.values
10771077

10781078
if hasattr(values, 'memory_usage'):
10791079
return values.memory_usage(deep=deep)

pandas/core/sparse/array.py

+37-1
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@
1111
from pandas.core.base import PandasObject
1212

1313
from pandas import compat
14-
from pandas.compat import range
14+
from pandas.compat import range, PYPY
1515
from pandas.compat.numpy import function as nv
1616

1717
from pandas.core.dtypes.generic import ABCSparseSeries
@@ -30,6 +30,7 @@
3030
from pandas.core.dtypes.missing import isna, notna, na_value_for_dtype
3131

3232
import pandas._libs.sparse as splib
33+
import pandas._libs.lib as lib
3334
from pandas._libs.sparse import SparseIndex, BlockIndex, IntIndex
3435
from pandas._libs import index as libindex
3536
import pandas.core.algorithms as algos
@@ -238,6 +239,41 @@ def kind(self):
238239
elif isinstance(self.sp_index, IntIndex):
239240
return 'integer'
240241

242+
def memory_usage(self, deep=False):
243+
"""Memory usage of SparseArray
244+
245+
Parameters
246+
----------
247+
deep : bool
248+
Introspect the data deeply, interrogate
249+
`object` dtypes for system-level memory consumption
250+
251+
Returns
252+
-------
253+
scalar bytes of memory consumed
254+
255+
Notes
256+
-----
257+
Memory usage does not include memory of empty cells filled by
258+
fill_value. And it does not include memory consumed by
259+
elements that are not components of the array if deep=False
260+
261+
See also
262+
--------
263+
Series.memory_usage
264+
"""
265+
266+
values = self.sp_values
267+
if hasattr(values, 'memory_usage'):
268+
return values.memory_usage(deep=deep)
269+
270+
v = values.nbytes
271+
272+
if deep and is_object_dtype(self) and not PYPY:
273+
v += lib.memory_usage_of_objects(values)
274+
275+
return v
276+
241277
def __array_wrap__(self, out_arr, context=None):
242278
"""
243279
NumPy calls this method when ufunc is applied

0 commit comments

Comments
 (0)