创建词频统计表格触发TypeError: string operation on non-string array
TypeError: string operation on non-string array 解决方法
问题背景
在Jupyter Notebook中读取古腾堡项目的某本目标书籍,拆分章节后尝试用表格统计指定词汇出现次数时触发TypeError: string operation on non-string array错误,相同代码在其他古腾堡书籍上可正常运行。
错误原因
古腾堡书籍格式不统一,这本目标书籍通过split('CHAPTER ')拆分后得到的chapters列表中,存在空字符串或被numpy判定为非字符串类型的元素。np.char.count要求输入数组的所有元素必须是字符串类型,不符合要求的元素会触发该错误。
解决方案
方案1:过滤无效章节条目
先对拆分后的章节列表进行过滤,移除空字符串和非字符串元素,确保所有条目都是有效字符串:
book = read_url("古腾堡目标书籍的URL") # 过滤掉空字符串和非字符串类型的章节 chapters = [ch for ch in book.split('CHAPTER ')[1:] if isinstance(ch, str) and ch.strip()]
方案2:强制转换为字符串numpy数组
将章节列表明确转换为字符串类型的numpy数组,确保np.char.count处理的是纯字符串数组:
book = read_url("古腾堡目标书籍的URL") chapters = book.split('CHAPTER ')[1:] # 强制转换为字符串类型数组,避免类型识别问题 chapters_arr = np.array(chapters, dtype=str) # 后续表格创建代码使用转换后的数组 table = Table().with_columns([ "Aristotle", np.char.count(chapters_arr, "Aristotle"), "mathematics", np.char.count(chapters_arr, "mathematics"), "science", np.char.count(chapters_arr, "science"), "morals", np.char.count(chapters_arr, "morals"), "virtues", np.char.count(chapters_arr, "virtues"), "ethics", np.char.count(chapters_arr, "ethics") ]) table
辅助排查:定位问题章节
如果想具体定位是哪个章节导致的错误,可以先打印每个章节的类型和有效内容长度:
book = read_url("古腾堡目标书籍的URL") chapters = book.split('CHAPTER ')[1:] for idx, ch in enumerate(chapters): print(f"章节{idx+1}: 类型={type(ch)}, 有效内容长度={len(ch.strip())}")
内容的提问来源于stack exchange,提问作者br0work
相关产品推荐
相关产品推荐

