如何创建Numpy数组并处理字符串:去空格、逗号换句号
NumPy数组字符串处理解决方案
处理需求
对给定的NumPy字符串数组执行两项操作:
- 移除字符串中的所有空格
- 将字符串中的逗号替换为句号
原始数组创建
先将你提供的数据转为NumPy数组:
import numpy as np arr = np.array([ ['ALIOR', 'PLALIOR00045', '88 860 000', '1 386 216 000', '0,891', '2,16', '14'], ['CCC', 'PLCCC0000016', '27 918 000', '1 292 603 400', '0,831', '5,28', '42'], ['CDPROJEKT', 'PLOPTTC00011', '67 348 000', '22 864 646 000', '14,702', '7,39', '7'], ['CYFRPLSAT', 'PLCFRPT00013', '275 301 000', '6 854 994 900', '4,408', '1,17', '14'], ['DINOPL', 'PLDINPL00011', '47 937 000', '8 916 282 000', '5,733', '9,13', '12'], ['JSW', 'PLJSW0000015', '52 636 000', '716 902 320', '0,461', '1,51', '24'], ['KGHM', 'PLKGHM000017', '136 410 000', '9 881 540 400', '6,354', '4,78', '8'], ['LOTOS', 'PLLOTOS00025', '86 543 000', '5 609 717 260', '3,607', '2,91', '16'], ['LPP', 'PLLPP0000011', '1 306 000', '7 444 200 000', '4,787', '1,43', '19'], ['MBANK', 'PLBRE0000012', '12 997 000', '2 830 746 600', '1,820', '0,42', '24'], ['ORANGEPL', 'PLTLKPL00017', '647 357 000', '4 285 503 340', '2,756', '1,16', '13'], ['PEKAO', 'PLPEKAO00016', '176 379 000', '9 619 710 660', '6,185', '5,27', '9'], ['PGE', 'PLPGER000010', '796 776 000', '3 561 588 720', '2,290', '2,88', '18'], ['PGNIG', 'PLPGNIG00014', '1 624 608 000', '6 072 784 704', '3,905', '1,56', '12'], ['PKNORLEN', 'PLPKN0000018', '289 049 000', '17 701 360 760', '11,382', '12,44', '8'], ['PKOBP', 'PLPKO0000016', '857 593 000', '18 807 014 490', '12,093', '10,49', '9'], ['PLAY', 'LU1642887738', '114 151 000', '3 696 209 380', '2,377', '1,47', '16'], ['PZU', 'PLPZU0000011', '568 305 000', '17 515 160 100', '11,262', '6,64', '6'], ['SANPL', 'PLBZ00000044', '33 207 000', '5 213 499 000', '3,352', '1,91', '18'], ['TAURONPE', 'PLTAURN00011', '1 043 590 000', '1 252 308 000', '0,805', '1,21', '33'] ], dtype='<U14')
解决方案
方法1:使用NumPy向量化字符串操作(效率最高)
利用numpy.char模块的内置方法,直接对整个数组执行批量操作,无需循环:
# 第一步:移除所有空格 arr_no_spaces = np.char.replace(arr, ' ', '') # 第二步:替换逗号为句号 processed_arr = np.char.replace(arr_no_spaces, ',', '.') # 查看结果 print(processed_arr)
方法2:自定义处理函数+np.vectorize(灵活性强)
如果需要扩展更复杂的处理逻辑,可以封装函数后用np.vectorize转为数组可用的函数:
def process_str(s): return s.replace(' ', '').replace(',', '.') # 向量化处理函数 vec_process = np.vectorize(process_str) processed_arr = vec_process(arr)
方法3:列表推导式(直观易懂,适合小型数组)
通过嵌套列表推导遍历每个元素,处理后转回NumPy数组:
processed_arr = np.array([ [s.replace(' ', '').replace(',', '.') for s in row] for row in arr ])
进阶:仅处理特定列
如果只需要处理数字相关的列(比如第3到第7列,索引从2开始),可以针对性修改:
processed_arr = arr.copy() # 仅处理第3列到最后一列 processed_arr[:, 2:] = np.char.replace( np.char.replace(processed_arr[:, 2:], ' ', ''), ',', '.' )
内容的提问来源于stack exchange,提问作者Harsh Shukla
相关产品推荐
相关产品推荐

