📜  Python|熊猫系列.itemsize(1)

📅  最后修改于: 2023-12-03 15:04:27.454000             🧑  作者: Mango

Python Pandas系列之.itemsize

在 Python Pandas 库中,有一个叫做 itemsize 的属性,可以用来返回一个数据类型的字节数。这个属性可以用来帮助我们判断一个 DataFrame 中各个列的数据类型、占用内存大小等信息,进而进行内存优化。

使用方法

在使用 Pandas 时,我们可以通过以下方式来获取 DataFrame 中各列数据类型的内存大小信息:

import pandas as pd

df = pd.read_csv('file.csv') # 读取一个 csv 文件
print(df.dtypes.itemsize)

这里我们通过 dtypes 属性来获取 DataFrame 中各列的数据类型,再通过 itemsize 属性来获取每个数据类型在内存中所占的字节数。

值得注意的是,如果 DataFrame 中有多种数据类型,itemsize 属性只会返回其中某一种数据类型的字节数。这时,我们可以通过循环来获取各个列的数据类型占用的内存大小,示例代码如下:

import pandas as pd

df = pd.read_csv('file.csv') # 读取一个 csv 文件

for col in df.columns:
    print(col, df[col].dtype.itemsize)

这里通过循环遍历 DataFrame 中的每一列,再通过 .dtype.itemsize 属性来获取每个列数据类型所占用的字节数。

示例

举个例子,我们可以通过以下代码生成一个包含不同数据类型的 DataFrame:

import numpy as np
import pandas as pd

df = pd.DataFrame({
    'int_col': np.random.randint(0, 10000, 50, dtype=np.int32),
    'float_col': np.random.rand(50),
    'str_col': ['aaa', 'bbb', 'ccc'] * 16,
    'bool_col': np.random.randint(0, 2, 50, dtype=np.bool_)
})
print(df.dtypes)
print(df.dtypes.itemsize)

输出结果如下:

int_col        int32
float_col    float64
str_col       object
bool_col        bool
dtype: object
8

我们可以看到不同数据类型的内存大小分别为 4 bytes(int32)、8 bytes(float64)、全部列皆为 3 bytes(即字符串 'aaa''bbb''ccc')以及 1 byte(bool)。itemsize 属性返回的结果是第一个数据类型的字节数,也就是 4 bytes。

我们还可以通过循环遍历各个列的数据类型,来获取各个列所占内存大小:

for col in df.columns:
    print(col, df[col].dtype.itemsize)

输出结果如下:

int_col 4
float_col 8
str_col 4
bool_col 1

我们可以看到,int_col 的数据类型占用 4 bytes,float_col 的数据类型占用 8 bytes,str_col 的数据类型占用 4 bytes,bool_col 的数据类型占用 1 byte。

总结

在使用 Pandas 时,通过 .dtypes.itemsize 来获取数据类型的字节数,可以帮助我们了解 DataFrame 中各列数据类型占用内存大小,进而进行内存优化。