如何用map或lambda函数将NumPy数组指定列字符串转元组
解决方法
你可以结合ast.literal_eval(安全解析Python字面量)和map+lambda实现需求,完整代码如下:
import numpy as np import ast # 初始化object类型的numpy数组,才能存储混合类型元素 x = np.array([[123, '()', 34], [5, '(3,4,5)', 100]], dtype=object) # 处理指定列(此处为索引1的第二列) x[:, 1] = list(map(lambda s: ast.literal_eval(s), x[:, 1])) # 验证结果 print(x) # 输出:[[123 () 34] # [5 (3, 4, 5) 100]]
注意事项
- 必须指定数组
dtype=object,否则numpy会自动将所有元素统一转为字符串类型,无法存储转换后的tuple - 优先用
ast.literal_eval而非原生eval,前者仅会解析Python字面量结构,不会执行恶意代码,安全性更高 map返回的是迭代器,赋值给numpy数组列时需要转为list,否则会报错
内容的提问来源于stack exchange,提问作者eng2019
相关产品推荐
相关产品推荐

