如何使用Pandas查找以指定字符串开头的单元格位置
查找DataFrame中以特定字符串开头的单元格索引
嘿,我来帮你搞定这个在DataFrame里定位目标单元格的问题!下面针对你的示例场景,一步步给出具体的实现方案:
第一步:构造示例DataFrame
先把你给出的示例数据用pandas构造出来:
import pandas as pd df = pd.DataFrame({ 'Price': [947.2, 129.3, 161.69], 'Rate p/lot': ['1.25 BAM', '2.1 NAD', '0.8 CAD'], 'Total Comm': [1.25, 1.25, 2.00] })
第二步:实现查找逻辑
这里要注意:你的示例中NAD其实是单元格内容的结尾部分,所以我会同时说明开头匹配和结尾匹配两种情况,你可以按需切换:
方法一:遍历式查找(适合小数据集,逻辑直观)
# 定义要搜索的目标字符串 target_strings = ['NAD'] matches = [] # 遍历每一行 for row_idx, row in df.iterrows(): # 遍历该行的每个单元格 for col_name, value in row.items(): str_val = str(value) # 转为字符串,兼容数值类型单元格 # 如果你要找「以目标字符串开头」的单元格,用startswith # if any(str_val.startswith(target) for target in target_strings): # 你的示例是找结尾匹配的,所以用endswith if any(str_val.endswith(target) for target in target_strings): # 转换为1-based索引(和你预期的(1,2)对应),如果用0-based就去掉+1 col_idx = df.columns.get_loc(col_name) + 1 matches.append((row_idx + 1, col_idx)) # 输出结果 print(matches) # 输出: [(1, 2)] 正好对应你要的(1,2)位置的内容
方法二:向量化操作(适合大数据集,效率更高)
用applymap()生成布尔掩码,再提取匹配的索引:
target_strings = ['NAD'] # 生成布尔掩码,这里用endswith对应你的示例,开头匹配换startswith mask = df.applymap(lambda x: any(str(x).endswith(t) for t in target_strings)) # 获取0-based的匹配索引 match_idx_0based = list(zip(mask[mask].index, mask[mask].columns)) # 转为1-based索引 match_idx_1based = [(r+1, df.columns.get_loc(c)+1) for r, c in match_idx_0based] print(match_idx_1based) # 输出: [(1, 2)]
关键说明
- 如果确实需要严格匹配「以特定字符串开头」的单元格,把代码里的
endswith()替换成startswith()即可。 - pandas默认用0-based索引(行、列从0开始计数),如果你需要和示例一致的1-based索引,就给行号和列号各加1。
内容的提问来源于stack exchange,提问作者Piyush S. Wanare
相关产品推荐
相关产品推荐

