循环内存储索引的列表自动转为NumPy数组引发报错该如何解决?
问题根因
- 你当前贴出的代码片段中没有修改
index_list类型的语句,结合你提供的内核代码截图可以判断,你实际运行的完整代码中存在漏写的赋值逻辑,比如误将df_loop.index.values这类numpy数组直接赋值给了index_list,而非调用追加类方法添加元素,导致index_list从list类型被覆盖为numpy数组。 - 你异常捕获块中的
insert方法调用错误:Python列表的insert方法需要传入两个参数(插入位置、插入值),你仅传入了一个值,哪怕index_list还是列表类型也会触发报错。
修复方案
方案1:修复现有循环逻辑
你可以直接用列表的extend方法批量追加匹配索引,避免循环单个添加,同时全程不会修改列表类型:
import pandas as pd import numpy as np data = pd.read_csv('./real_acct.txt', delimiter = "\t") index_list = [] for col in data: # 查找当前列包含关键词的行 match_mask = data[col].astype(str).str.contains("SOME VAL", na = False) match_indexes = data[match_mask].index.tolist() # 批量追加匹配的索引 index_list.extend(match_indexes) # 去重(同一行可能多列匹配关键词,避免重复索引) index_list = list(sorted(set(index_list))) print(index_list)
方案2:用pandas原生方法实现,性能更高
百万行级别数据用原生向量化操作比手动循环列效率高很多,少量代码就能实现全表搜索:
import pandas as pd import numpy as np data = pd.read_csv('./real_acct.txt', delimiter = "\t") # 全表转字符串后按行判断是否存在关键词,直接获取匹配的索引列表 index_list = data[data.astype(str).apply(lambda x: x.str.contains('SOME VAL', na=False)).any(axis=1)].index.tolist() print(index_list)
内容的提问来源于stack exchange,提问作者Joe Wolf
相关产品推荐
相关产品推荐

