如何对(66180L,)型numpy.ndarray字符串按空格分割并提取单词与数字
处理numpy字符串数组,提取单词与数字
嘿,我来帮你搞定这个需求!针对你那个形状为(66180L,)的numpy字符串数组,我们可以通过两种直观的方式来实现遍历、分割并筛选出单词和数字:
方法1:列表推导式+字符串方法(直观易懂)
我们可以逐个遍历数组中的每个字符串,按空格分割后,用字符串内置方法筛选出符合要求的内容:
import numpy as np # 替换成你实际的numpy数组 arr = np.array(["hello 123 !@# world 456", "foo bar 789 $%^"], dtype=str) processed_list = [] for s in arr: # 按空格分割字符串为单个元素 split_parts = s.split() # 筛选:保留纯字母/纯数字的部分(允许字母数字混合的话,换成part.isalnum()即可) filtered_parts = [part for part in split_parts if part.isalpha() or part.isdigit()] processed_list.append(filtered_parts) # 可选:转回numpy数组(因每个元素长度可能不同,用object类型存储) processed_arr = np.array(processed_list, dtype=object)
补充说明:
isalpha():判断内容是否为纯字母组成的单词isdigit():判断内容是否为纯数字- 如果需要保留
abc123这类字母数字混合的内容,直接用part.isalnum()替代判断条件即可
方法2:正则表达式(灵活高效)
如果字符串里的特殊字符比较复杂,用正则表达式提取会更精准,能匹配单词边界内的字母/数字:
import numpy as np import re # 替换成你实际的numpy数组 arr = np.array(["hello 123 !@# world 456", "foo bar 789 $%^"], dtype=str) processed_list = [] # 正则模式:匹配由字母或数字组成的完整单词 pattern = r'\b[a-zA-Z0-9]+\b' for s in arr: # 提取所有符合模式的内容 matched_parts = re.findall(pattern, s) processed_list.append(matched_parts) processed_arr = np.array(processed_list, dtype=object)
这里的\b是单词边界标记,能确保我们提取的是完整的单词/数字,不会把特殊字符旁边的片段误包含进来。
两种方法都能高效处理你那66k长度的数组,根据你的实际字符串复杂度选择就行~
内容的提问来源于stack exchange,提问作者Jayganesh Kalla
相关产品推荐
相关产品推荐

