如何导入元素为Numpy数组格式的CSV并转换为三维Numpy数组?
Numpy读取数组格式CSV转三维数组实现方案
问题场景
多款软件包兼容性不足时,导出的CSV文件会存储类Numpy数组格式的内容,使用genfromtxt('Input.csv',delimiter=',',dtype=None,encoding=None)读取后会得到字符串组成的二维数组,示例结构:
[['[4 3 2 1]' '[1 1 0 0]'] ['[1 3 4 2]' '[0 1 1 0]']]
需要将该字符串数组转换为数值类型的三维Numpy数组,目标结构:
[[[4 3 2 1] [1 1 0 0]] [[1 3 4 2] [0 1 1 0]]]
实现代码
方法1:基础字符串处理(适合格式规范的文件)
逻辑简单无额外依赖,小数据量场景下直接可用:
import numpy as np # 读取文件得到字符串二维数组 arr_str = np.genfromtxt('Input.csv', delimiter=',', dtype=None, encoding=None) # 逐元素去除方括号、拆分空格分隔的数字转整型,自动重构三维维度 arr_3d = np.array([ [list(map(int, cell.strip('[]').split())) for cell in row] for row in arr_str ])
方法2:正则提取(适配格式杂乱的文件)
如果CSV中存在多余空格、换行、特殊符号等格式问题,用正则提取数字容错性更高:
import numpy as np import re arr_str = np.genfromtxt('Input.csv', delimiter=',', dtype=None, encoding=None) # 正则匹配单元格内所有数字,忽略无关符号 arr_3d = np.array([ [list(map(int, re.findall(r'\d+', cell))) for cell in row] for row in arr_str ])
方法3:向量化操作(适合大数据量文件)
用Numpy内置的字符串向量化操作替代Python层循环,处理万行以上大文件时效率提升明显:
import numpy as np arr_str = np.genfromtxt('Input.csv', delimiter=',', dtype=None, encoding=None) # 批量去除方括号、统一空格分隔格式 cleaned_arr = np.char.replace(np.char.strip(arr_str, '[]'), ' ', ' ') # 扁平化后批量转数值,再按原二维数组的维度重构为三维数组 arr_3d = np.array( [np.fromstring(cell, sep=' ', dtype=int) for cell in cleaned_arr.flatten()] ).reshape(*arr_str.shape, -1)
结果校验
处理完成后可通过两个简单操作确认结果正确:
- 执行
print(arr_3d.shape),示例数据会输出(2, 2, 4),对应三维数组结构 - 执行
print(arr_3d.dtype),会输出整型类型(如int32/int64),确认已从字符串转为数值类型
内容的提问来源于stack exchange,提问作者econra2017
相关产品推荐
相关产品推荐

