19 NumPy 数据保存与加载

19 NumPy 数据保存与加载

NumPy 提供了简单而高效的方法来保存和加载数据。下面我们将通过具体案例来学习如何使用 NumPy 的函数将数组保存到文件中,以及如何从文件中加载数据。

保存数据

NumPy 提供了几个函数来保存数组:

保存为 .npy 文件

最常用的方法是使用 numpy.save 函数,它将数组保存为二进制格式的 .npy 文件。这种格式高效地存储数组的形状和数据类型。

示例代码:

1
2
3
4
5
6
7
import numpy as np

# 创建一个示例数组
data = np.array([[1, 2, 3], [4, 5, 6]])

# 保存数组到 .npy 文件
np.save('data.npy', data)

在上述代码中,我们创建了一个二维数组 data,并使用 np.save 将其保存到文件 data.npy 中。

保存为 .npz 文件

如果需要保存多个数组,可以使用 numpy.savez,它会将数组保存为 .npz 文件,允许存储多个数组以及相关的元数据。

示例代码:

1
2
3
4
5
6
# 创建多个数组
data1 = np.array([[1, 2], [3, 4]])
data2 = np.array([[5, 6], [7, 8]])

# 保存多个数组到 .npz 文件
np.savez('data.npz', array1=data1, array2=data2)

在这个示例中,np.savezdata1data2 保存到 data.npz 文件中。你可以为每个数组指定一个名称。

加载数据

使用 numpy.load 函数可以轻松地加载 .npy.npz 文件中的数据。

加载 .npy 文件

下面是加载之前保存的 .npy 文件的示例:

示例代码:

1
2
3
4
# 加载 .npy 文件
loaded_data = np.load('data.npy')

print(loaded_data)

这段代码将输出数组 data,和我们之前保存的一样。

加载 .npz 文件

加载 .npz 文件时,我们需要使用 numpy.load 并通过键名访问各个数组。

示例代码:

1
2
3
4
5
6
7
8
9
# 加载 .npz 文件
loaded_npz = np.load('data.npz')

# 访问保存的数组
array1 = loaded_npz['array1']
array2 = loaded_npz['array2']

print('Array 1:\n', array1)
print('Array 2:\n', array2)

上述代码展示了如何加载 .npz 文件并访问其中的数组。loaded_npz 是一个类似字典的对象,可以使用保存时指定的键来访问相应的数组。

小结

在本小节中,我们学习了如何使用 NumPy 保存和加载数据。通过 numpy.savenumpy.saveznumpy.load 函数,我们能够高效地存储和读取数组。掌握这些基本的 I/O 操作将极大地提高你使用 NumPy 处理数据的效率。

20 处理缺失值

20 处理缺失值

在数据科学中,处理缺失值是数据预处理的重要步骤。使用 NumPy,我们可以轻松地识别和处理数组中的缺失值。以下是一些常用的处理缺失值的方法。

创建带有缺失值的数组

首先,我们可以创建一个包含缺失值的 NumPy 数组。缺失值通常用 np.nan 表示。

1
2
3
4
5
import numpy as np

# 创建一个包含缺失值的数组
data = np.array([1, 2, np.nan, 4, 5, np.nan])
print(data)

输出:

1
[ 1.  2. nan  4.  5. nan]

检测缺失值

我们可以使用 np.isnan() 函数来检测数组中的缺失值。

1
2
3
# 检测缺失值
missing_mask = np.isnan(data)
print(missing_mask)

输出:

1
[False False  True False False  True]

missing_mask 数组中的 True 表示相应位置的值是缺失值。

过滤缺失值

接下来,我们可以过滤掉缺失值,以获得仅包含有效数据的数组。

1
2
3
# 过滤缺失值
filtered_data = data[~missing_mask]
print(filtered_data)

输出:

1
[1. 2. 4. 5.]

这里使用了~运算符来反转布尔数组,从而选择非缺失值的元素。

填充缺失值

在某些情况下,可能希望用特定值替换缺失值,例如用 0 或数组的均值。可以使用 np.nan_to_num() 替换缺失值。

1
2
3
# 用0填充缺失值
filled_data = np.nan_to_num(data, nan=0)
print(filled_data)

输出:

1
[1. 2. 0. 4. 5. 0.]

我们还可以计算数组的均值,并用此均值填充缺失值。

1
2
3
4
# 用均值填充缺失值
mean_value = np.nanmean(data)
data[np.isnan(data)] = mean_value
print(data)

输出:

1
[1. 2. 3. 4. 5. 3.]

np.nanmean(data) 计算了非缺失值的均值,然后我们用这个均值替换了原数组中的缺失值。

总结

使用 NumPy 处理缺失值非常高效。在数据分析之前,我们需要:

  1. 使用 np.isnan() 检测缺失值。
  2. 使用过滤或替换方法来处理这些缺失值。

通过这些方法,我们能够确保我们的数据分析是基于完整可靠的数据集。

21 NumPy零基础教程总结

21 NumPy零基础教程总结

在本教程中,我们深入探讨了NumPy库的基本概念和功能,旨在帮助初学者从零开始掌握这款强大的数据处理工具。以下是本教程的关键内容总结。

NumPy简介

NumPy是一个用于科学计算的库,它为Python提供了支持大量维度数组和矩阵的支持,并包括用于对这些数组进行操作的多种数学函数。

主要特性

  • 高性能多维数组对象ndarray
  • 丰富的数学函数库:支持多种操作
  • 与其他库的兼容性:与PandasMatplotlib等库轻松集成

数组的创建与基础操作

创建数组

使用numpy.array()函数创建数组:

1
2
3
4
5
6
7
8
9
import numpy as np

# 创建一维数组
arr_1d = np.array([1, 2, 3, 4])
print(arr_1d)

# 创建二维数组
arr_2d = np.array([[1, 2, 3], [4, 5, 6]])
print(arr_2d)

常用数组创建函数

  • np.zeros(shape):创建全零数组
  • np.ones(shape):创建全一数组
  • np.arange(start, stop, step):创建等差数组
  • np.linspace(start, stop, num):创建等间隔数值数组
1
2
3
4
5
6
7
# 创建一个2行3列的零数组
zeros_array = np.zeros((2, 3))
print(zeros_array)

# 创建一个从0到10的数组,步长为2
arange_array = np.arange(0, 10, 2)
print(arange_array)

数组运算

NumPy支持多种数组运算,包括加、减、乘、除等基本算术运算。

1
2
3
4
5
6
7
8
9
10
a = np.array([1, 2, 3])
b = np.array([4, 5, 6])

# 数组加法
sum_array = a + b
print(sum_array) # 输出: [5 7 9]

# 数组乘法
product_array = a * b
print(product_array) # 输出: [ 4 10 18]

数组索引与切片

通过索引和切片,可以方便地获取数组的特定部分。

1
2
3
4
5
6
7
# 二维数组索引
element = arr_2d[1, 2] # 获取第二行第三列的元素
print(element) # 输出: 6

# 切片操作
slice_array = arr_2d[:, 1] # 获取所有行的第二列
print(slice_array) # 输出: [2 5]

数组的形状与维度

可以使用shapendim属性查看数组的形状和维度。

1
2
3
# 查看数组的形状和维度
print(arr_2d.shape) # 输出: (2, 3)
print(arr_2d.ndim) # 输出: 2

数据类型

NumPy支持多种数据类型,通过dtype属性可以查看或设置数据类型。

1
2
3
4
5
6
# 查看数组的数据类型
print(arr_1d.dtype) # 输出: int64 (具体类型依据系统)

# 创建浮点类型数组
float_array = np.array([1, 2, 3], dtype=float)
print(float_array.dtype) # 输出: float64

统计与聚合函数

NumPy提供了多种方便的统计函数,如mean()sum()min()max()等。

1
2
3
4
5
6
data = np.array([1, 2, 3, 4, 5])

print(np.mean(data)) # 输出: 3.0
print(np.sum(data)) # 输出: 15
print(np.min(data)) # 输出: 1
print(np.max(data)) # 输出: 5

小结

通过本教程,我们学习了NumPy的基础知识,包括数组的创建、运算、索引、切片以及常用的统计函数。掌握这些内容后,你可以利用NumPy进行高效的数据处理和分析。

如果有更多问题或者想深入学习,可以参考NumPy的官方文档,或结合一些实际数据集练习。