—— 超越原生 Python 列表,解锁高性能数值计算,深入理解 Pandas 的底层依赖
在前面一系列关于 Pandas 的学习中,我们已经领略了其在数据处理和分析方面的强大威力。我们学会了使用 DataFrame 和 Series 来高效地操作表格数据。但是,你是否好奇,Pandas 为何能够如此高效地处理大规模数据?其背后隐藏着怎样的 “秘密武器”?
答案就是我们今天要深入学习的主角——NumPy (Numerical Python)。
NumPy:Python 科学计算的基石
NumPy 是 Python 中用于 科学计算 的 基础核心库。它提供了:
为什么在学习 Pandas 之后还要学习 NumPy?
你可能会问,既然 Pandas 已经那么好用了,为什么我们还要回过头来学习 NumPy? 原因主要有以下几点:
SciPy
(科学计算库)、Matplotlib
(可视化库)、Scikit-learn
(机器学习库) 等,都依赖于 NumPy。掌握 NumPy 是深入学习这些库的前提。虽然本专栏将 NumPy 放在了 Pandas 之后讲解 (因为对于初学者,直接上手 Pandas 更贴近数据分析的实际应用流程),但掌握 NumPy 的核心概念和操作,对于提升你的数据分析效率、深入理解 Pandas 以及为后续学习更高级的技术打下基础,都至关重要。
本篇博客将带你深入 NumPy 的世界,重点学习:
掌握 NumPy,你将拥有更强大的数值计算能力,并能更深刻地理解你所使用的 Pandas 工具!
与 Pandas 和 Matplotlib 类似,如果你使用 Anaconda,NumPy 通常已经预装。 若未安装,可使用 pip 或 conda 安装:
pip install numpy
# 或者
conda install numpy
在 Python 脚本或 Jupyter Notebook 中,导入 NumPy 库,并约定俗成地将其简写为 np
。
import numpy as np
NumPy 最核心的概念就是 ndarray (N-dimensional array),即 N 维数组。 它是一个 同质 (homogeneous) 数据类型的 多维网格。
ndarray 的关键特性:
(3, 4)
。int8
, int16
, int32
, int64
, uint8
(无符号整数), float16
, float32
, float64
, complex64
, complex128
, bool
, object
(可以存储 Python 对象,但会失去 NumPy 的性能优势), string_
, unicode_
等。 这与 Python 列表可以包含不同类型元素的特性形成对比。有多种方法可以创建 NumPy ndarray 对象:
从 Python 列表或元组创建:np.array()
这是最常用的创建方式,可以将 Python 的列表或嵌套列表转换为 ndarray。
# 创建一维数组
list1 = [1, 2, 3, 4, 5]
arr1d = np.array(list1)
print("一维数组 arr1d:\n", arr1d)
print("arr1d 的类型:", type(arr1d))
print("arr1d 的数据类型:", arr1d.dtype)
# 创建二维数组 (矩阵)
list2d = [[1, 2, 3], [4, 5, 6]]
arr2d = np.array(list2d)
print("\n二维数组 arr2d:\n", arr2d)
print("arr2d 的数据类型:", arr2d.dtype)
# 创建指定数据类型的数组
arr_float = np.array([1, 2, 3], dtype=np.float64) # 指定为 float64 类型
print("\n指定数据类型的数组 arr_float:\n", arr_float)
print("arr_float 的数据类型:", arr_float.dtype)
arr_str = np.array([1, 2, 3], dtype=str) # 指定为字符串类型
print("\n指定数据类型的数组 arr_str:\n", arr_str)
print("arr_str 的数据类型:", arr_str.dtype)
使用 NumPy 内置函数创建特定数组:
np.zeros(shape, dtype=float)
: 创建指定形状 shape
且所有元素都为 0 的数组。
zeros_arr = np.zeros((2, 3)) # 创建一个 2x3 的全零浮点型数组
print("\n全零数组 zeros_arr:\n", zeros_arr)
np.ones(shape, dtype=float)
: 创建指定形状 shape
且所有元素都为 1 的数组。
o