You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在Pandas DataFrame中查找字符串在列中的整数行索引?

如何在Pandas DataFrame中查找字符串在列中的整数行索引?

看起来你遇到的问题核心是大小写不匹配导致筛选不到数据,进而触发了索引越界的错误,我来一步步帮你排查和解决:

先说说你的错误原因

你执行了df1['name'].str.lower(),但没有把转换后的结果赋值回原DataFrame的name列——这意味着原DataFrame里的name列还是原来的大写格式(比如P1、P2),而你要搜索的是小写的'p1',自然匹配不到任何行。这时候df1[df1['name'] == name_to_search]返回的是一个空DataFrame,再去取它的index[0],肯定会报“索引越界”的错误。

解决方案

1. 先解决大小写匹配问题

有两种思路统一大小写:

  • 把DataFrame的name列永久转成小写(或者大写),后续搜索就不用再处理了:
df1 = pd.read_csv(filepath_or_buffer='file.csv', header=[0])
df1['name'] = df1['name'].str.lower()  # 关键:把转换结果赋值回原列
name_to_search = 'p1'
  • 或者保持原列不变,仅在搜索时临时转换大小写:
df1 = pd.read_csv(filepath_or_buffer='file.csv', header=[0])
name_to_search = 'p1'
# 搜索时统一转成小写对比
matching_rows = df1[df1['name'].str.lower() == name_to_search]

2. 安全获取行索引(避免索引越界)

不管用哪种大小写处理方式,都要先检查是否有匹配的行,再去取索引:

# 获取所有匹配行的索引
matching_indices = df1[df1['name'].str.lower() == name_to_search].index

if len(matching_indices) > 0:
    row_indx1 = matching_indices[0]  # 取第一个匹配行的整数索引
else:
    print(f"没有找到名称为 {name_to_search} 的行")
    row_indx1 = -1  # 用-1或者其他值标记“未找到”

更简洁的替代方法

你也可以用numpy.where直接获取匹配的整数索引:

import numpy as np

matches = np.where(df1['name'].str.lower() == name_to_search)[0]
if len(matches) > 0:
    row_indx1 = matches[0]
else:
    row_indx1 = -1

额外小提醒

如果你的CSV文件里,列值后面带有空格(比如你示例里的P1, 1,1,1,逗号后有空格),读取的时候可以加上skipinitialspace=True参数,避免列值带空格导致匹配失败:

df1 = pd.read_csv(filepath_or_buffer='file.csv', header=[0], skipinitialspace=True)

以后遇到类似的索引越界错误,建议先单独打印筛选后的DataFrame(比如print(df1[df1['name'] == name_to_search])),看看是不是空的——这样能快速定位到是筛选条件的问题,而不是索引获取的问题哦!

备注:内容来源于stack exchange,提问作者ewr3243

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.15 15:47:57