Skip to content

Commit 3f52a44

Browse files
committed
Ah ha I think I got it
1 parent 5e59e9c commit 3f52a44

File tree

2 files changed

+16
-4
lines changed

2 files changed

+16
-4
lines changed

pandas/_libs/lib.pyx

+6
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,12 @@ def memory_usage_of_objects(ndarray[object, ndim=1] arr):
5959
cdef Py_ssize_t i, n
6060
cdef int64_t s = 0
6161

62+
# The problem here is that...
63+
# A SparseArray of size 1 that has fill_value = the only value
64+
# will cause this
65+
66+
# n = 1
67+
#
6268
n = len(arr)
6369
for i in range(n):
6470
s += arr[i].__sizeof__()

pandas/core/base.py

+10-4
Original file line numberDiff line numberDiff line change
@@ -1069,12 +1069,18 @@ def memory_usage(self, deep=False):
10691069
--------
10701070
numpy.ndarray.nbytes
10711071
"""
1072-
if hasattr(self.values, 'memory_usage'):
1073-
return self.values.memory_usage(deep=deep)
1072+
# 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
1077+
1078+
if hasattr(values, 'memory_usage'):
1079+
return values.memory_usage(deep=deep)
10741080

1075-
v = self.values.nbytes
1081+
v = values.nbytes
10761082
if deep and is_object_dtype(self) and not PYPY:
1077-
v += lib.memory_usage_of_objects(self.values)
1083+
v += lib.memory_usage_of_objects(values)
10781084
return v
10791085

10801086
def factorize(self, sort=False, na_sentinel=-1):

0 commit comments

Comments
 (0)