如何将CSV文件中的numpy数组格式字符串转换为有效numpy数组
解决CSV存储的numpy数组格式字符串还原问题
问题说明
你存储的字符串是numpy数组列表序列化后的结果,由于包含array标识无法直接通过常规JSON或字面量解析函数转换。
方法1:安全eval转换(代码更简洁)
适合确认字符串来源安全、没有注入风险的场景,步骤如下:
- 导入依赖库
import numpy as np
- 处理原始字符串并转换,假设你读取到的原始字符串变量为
raw_str:
# 1. 去除字符串外层多余的双引号 clean_str = raw_str.strip('"') # 2. 限制eval的命名空间,仅允许识别array和基础类型,避免注入风险 result = eval(clean_str, {'array': np.array, '__builtins__': None})
转换完成后result就是包含多个numpy数组的列表,如果你需要合并为单个数组,可根据子数组长度选择处理方式:
- 若所有子数组长度一致,直接用
np.array(result)得到标准多维数组 - 若子数组长度不一致(比如示例中最后一个数组长度为1),
np.array(result)会得到object类型的数组,也可自行补全长度后再转换
方法2:纯字符串预处理+字面量解析(无需eval,更安全)
适合无法确认字符串来源的场景,全程不执行动态代码:
- 导入依赖库
import ast import numpy as np
- 执行转换:
# 1. 去除外层双引号 clean_str = raw_str.strip('"') # 2. 替换array标识,转成标准Python列表格式字符串 list_str = clean_str.replace('array(', '').replace('])', ']') # 3. 转成Python嵌套列表 py_list = ast.literal_eval(list_str) # 4. 转成numpy数组 result = np.array([np.array(item) for item in py_list], dtype=object)
内容的提问来源于stack exchange,提问作者Nikita
相关产品推荐
相关产品推荐

