Tensor/Numpy/DataFrame之间的转换操作
PyTorch Tensor、Pandas DataFrame 与 NumPy Array 数据转换指南
在深度学习与数据科学开发中,数据常需要在 Pandas(数据处理与清洗)、NumPy(数值计算与矩阵操作) 和 PyTorch(模型训练与张量计算) 三者之间流动。本文总结了两两转换的标准操作、注意事项及实际开发中的经典连续转换场景。
一、 两两转换操作与代码示例
1.1 NumPy <-> PyTorch Tensor
① NumPy -> Tensor
- 推荐方式:
torch.from_numpy(array) - 替代方式:
torch.tensor(array)
1 | |
② Tensor -> NumPy
- 标准方式:
tensor.numpy()
1 | |
1.2 NumPy <-> Pandas DataFrame
① NumPy -> DataFrame
- 标准方式:
pd.DataFrame(data)
1 | |
② DataFrame -> NumPy
- 推荐方式:
df.to_numpy() - 替代方式:
df.values(官方已不推荐)
1 | |
1.3 Pandas DataFrame <-> PyTorch Tensor
Pandas 与 PyTorch 没有直接的原生转换 API,必须以 NumPy 为桥梁 进行间接转换。
① DataFrame -> Tensor
1 | |
② Tensor -> DataFrame
1 | |
二、 核心注意事项与踩坑指南
| 转换路径 | 核心注意事项 |
|---|---|
torch.from_numpy() |
内存共享(零拷贝):修改 NumPy 数组会同步修改
Tensor,反之亦然。如果需要独立数据,请追加 .clone()。 |
Tensor.numpy() |
CPU & 梯度限制: 1. 若 Tensor 在 GPU 上,必须先 .cpu() 移至内存;2. 若 Tensor 带有梯度追踪( requires_grad=True),必须先
.detach() 截断计算图。 |
df.to_numpy() |
数据类型一致性:若 DataFrame 中包含混合类型(如
int 与 string),转出的 NumPy 数组类型会退化为
object,传入 PyTorch 时会引发类型报错。 |
| 默认浮点精度 | float64 vs
float32:1. Pandas / NumPy 默认浮点数精度是 float64 (double);2. PyTorch 深度学习模型默认权重精度是 float32 (float)。从 DataFrame/NumPy 转 Tensor 后,建议显式转换类型 .float() 或
.to(torch.float32),避免模型训练时报类型不匹配错误。 |
三、 实际开发场景下的常见综合连续转换
在真实的机器学习/深度学习 Pipeline 中,数据通常遵循 “读取清洗 \(\to\) 模型预测 \(\to\) 结果保存” 的流转路线。
场景:从 CSV 读取数据,传入 PyTorch 模型预测,并将结果追加回 CSV 保存
1 | |
Tensor/Numpy/DataFrame之间的转换操作
https://jiangsanyin.github.io/2026/09/11/Tensor-Numpy-DataFrame之间的转换操作/