如何在Pandas DataFrame中定位部分字符串匹配的行与列?
问题解决:Pandas定位字符串部分匹配的行和列
错误原因
你遇到的报错是因为ask2 = np.equal(ask, True)生成的是一个布尔Series,直接用if ask2 == True判断时,Pandas无法确定你要验证整个Series全为True还是存在任意True值,因此抛出歧义错误。
优化解决方案(推荐向量化操作,避免循环)
Pandas原生支持向量化操作,比手动遍历高效得多,直接用以下代码获取所有匹配的行、列索引:
import pandas as pd import numpy as np # 生成布尔掩码:标记所有包含目标字符串的单元格 mask = df.apply(lambda col: col.str.contains('string', na=False)) # 获取所有匹配位置的行、列索引 row_indices, col_indices = np.where(mask)
na=False是为了处理空值,避免NaN干扰判断row_indices是所有匹配行的索引数组,col_indices是对应列的索引数组
修复你原有循环代码的写法
如果你坚持用循环实现,需要修改内层循环,判断单个元素而非整个Series:
rowindex = [] columnindex = [] for i in range(len(df.columns)): ask = df.iloc[:, i].str.contains('string', na=False) for j in range(len(ask)): # 直接判断当前行的布尔值 if ask.iloc[j]: columnindex.append(i) rowindex.append(j)
注意:这种循环方式在DataFrame数据量大时效率极低,不推荐使用。
内容的提问来源于stack exchange,提问作者M195
相关产品推荐
相关产品推荐

