提取 Pandas 数据框的人类可读内存使用情况

Extract human readable memory usage for Pandas data frame

我有一个数据框:

pd.DataFrame({'A': range(1, 10000)})

使用 df.info():

我可以得到一个很好的人类可读的东西说它有 78.2 KB 的内存使用
df.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 9999 entries, 0 to 9998
Data columns (total 1 columns):
 #   Column  Non-Null Count  Dtype
---  ------  --------------  -----
 0   A       9999 non-null   int64
dtypes: int64(1)
memory usage: 78.2 KB

我可以使用 df.memory_usage()(这就是 Pandas 本身计算自己的内存使用量的方式)获得具有类似效果的无用语句,但我想避免自己动手。我查看了 df.info 来源并一直追踪到 this line.

字符串的来源

这个特定的字符串是如何生成的,我怎样才能将其提取出来以便打印到日志中?

Nb 我无法解析 df.info() 输出,因为它直接打印到缓冲区;调用 str 只是 returns None.

Nb This line 也没有帮助,初始化的只是一个布尔标志,用于指示是否应该打印内存使用情况。

您可以创建 pandas.io.formats.info.DataFrameInfo and read the memory_usage_string property, which is exactly what df.info() does 的实例:

>>> df.info()
<class 'pandas.core.frame.DataFrame'>
RangeIndex: 9999 entries, 0 to 9998
Data columns (total 1 columns):
 #   Column  Non-Null Count  Dtype
---  ------  --------------  -----
 0   A       9999 non-null   int64
dtypes: int64(1)
memory usage: 78.2 KB
>>> pd.io.formats.info.DataFrameInfo(df).memory_usage_string.strip()
'78.2 KB'

如果您将 memory_usage 传递给 df.info,您可以直接将其传递给 DataFrameInfo:

pd.io.formats.info.DataFrameInfo(df, memory_usage='deep').memory_usage_string.strip()