MST

星途 面试题库

面试题:Python中Pandas处理大规模数据之内存优化

在处理大规模数据时,Pandas可能会占用大量内存。现有一个非常大的DataFrame,包含多种数据类型的列,你如何通过调整数据类型来优化内存使用?请给出具体代码示例,并解释每种数据类型调整的原因。
49.6万 热度难度
编程语言Python

知识考点

AI 面试

面试题答案

一键面试

以下是优化内存使用的示例代码及解释:

  1. 导入必要的库
import pandas as pd
  1. 创建一个示例DataFrame(假设这是一个非常大的DataFrame)
data = {
    'int_col': [1, 2, 3, 4, 5],
    'float_col': [1.1, 2.2, 3.3, 4.4, 5.5],
    'object_col': ['a', 'b', 'c', 'd', 'e']
}
df = pd.DataFrame(data)
  1. 调整数据类型
    • 整数类型:如果整数数值范围较小,可以使用 pd.Int8Dtype()pd.Int16Dtype() 等。例如,若整数在 -128 到 127 之间,可使用 Int8 类型,相比默认的 int64 能节省大量内存。
df['int_col'] = df['int_col'].astype('Int8')

这样做的原因是 Int8 类型只占用 1 字节内存,而 int64 占用 8 字节,在数据量巨大时能显著减少内存占用。

- **浮点类型**:如果精度要求不高,可使用 `float16` 或 `float32` 替代默认的 `float64`。
df['float_col'] = df['float_col'].astype('float32')

float16 占用 2 字节,float32 占用 4 字节,而 float64 占用 8 字节。在对精度要求不高的场景下,使用较小的浮点类型可优化内存。

- **对象类型**:如果对象列是分类数据,可转换为 `category` 类型。
df['object_col'] = df['object_col'].astype('category')

category 类型使用整数编码来存储不同的类别,相比对象类型,在存储相同类别重复值较多的数据时,内存占用会大大降低。

完整代码如下:

import pandas as pd

data = {
    'int_col': [1, 2, 3, 4, 5],
    'float_col': [1.1, 2.2, 3.3, 4.4, 5.5],
    'object_col': ['a', 'b', 'c', 'd', 'e']
}
df = pd.DataFrame(data)

df['int_col'] = df['int_col'].astype('Int8')
df['float_col'] = df['float_col'].astype('float32')
df['object_col'] = df['object_col'].astype('category')