面试题答案
一键面试以下是优化内存使用的示例代码及解释:
- 导入必要的库
import pandas as pd
- 创建一个示例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)
- 调整数据类型
- 整数类型:如果整数数值范围较小,可以使用
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')