
本文介绍使用 np.vectorize 配合自定义字符串处理函数,对二维 numpy 字符串数组进行高效、统一的文本清洗——包括移除所有空格、将千位分隔符或小数分隔符的英文逗号(,)替换为标准小数点(.)。
在金融、财经数据处理中,原始字符串常含空格(如 '88 860 000')和非标准小数符号(如 '0,891'),直接转为数值类型会失败。NumPy 提供了向量化操作能力,但其原生函数(如 np.char.replace)不支持链式多步替换,而 np.vectorize 可将任意 Python 函数广播到整个数组,是简洁可靠的解决方案。
✅ 推荐实现方式
定义轻量清洗函数,并通过 np.vectorize 应用于整个数组:
import numpy as np
def process_text(text):
return text.replace(' ', '').replace(',', '.')
# 假设 data 是您提供的 dtype='该函数先清除所有空格('88 860 000' → '88860000'),再将所有逗号替换为小数点('0,891' → '0.891')。np.vectorize 自动处理嵌套结构,无需循环或 apply_along_axis,代码简洁且性能良好(底层仍为 Python 循环,但接口优雅、可读性强)。
⚠️ 注意事项
-
dtype 兼容性:确保输入数组为字符串类型(如 '
-
不可逆性:此操作会永久丢失原始格式信息(如千位分隔逻辑),建议在清洗前备份原始数据;
-
数值后续处理:清洗后若需参与计算,应进一步转换为数值类型,例如:
numeric_col = processed_data[:, 2].astype(float) # 将第3列转为浮点数
-
替代方案对比:
- np.char.replace 仅支持单次替换,需嵌套调用(如 np.char.replace(np.char.replace(data, ' ', ''), ',', '.')),可读性差;
- pandas.DataFrame 更适合复杂清洗,但若已使用 NumPy 且无额外依赖需求,vectorize 是最轻量选择。
✅ 示例效果(首行)
原始:
['ALIOR', 'PLALIOR00045', '88 860 000', '1 386 216 000', '0,891', '2,16', '14']
清洗后:
['ALIOR', 'PLALIOR00045', '88860000', '1386216000', '0.891', '2.16', '14']
整个过程零报错、零遗漏,适用于任意形状的字符串数组,是 NumPy 生态中处理结构化文本清洗的实用范式。










