You need to enable JavaScript to run this app. Python Pandas如何根据列字符串指定位置的字母过滤行数据
优惠活动
大模型
产品
解决方案
定价
更多

Python Pandas如何根据列字符串指定位置的字母过滤行数据

Pandas基于字符串列指定位置字符筛选行的实现方法

原代码存在的问题

  • 字符串索引语法错误:Python字符串没有.index[1]的用法,.index()是用来查找子串位置的方法,取指定位置字符的正确写法是字符串[位置值]
  • 逻辑偏差:原代码的判断分支内执行的是打印全表操作,即便条件匹配,也不会只输出符合要求的行;同时循环过程没有记录匹配行的索引,没法精准定位目标行
  • 语法错误:print语句没有正确缩进,即便循环内的判断成立,代码也不会执行对应逻辑

推荐实现:向量化无循环写法

这是Pandas处理字符串列的标准范式,执行效率远高于手动写循环,尤其适合数据量较大的场景,参考代码:

import pandas as pd
df = pd.read_excel(r'C:\Users\Name\Desktop\pokemon.xlsx')
# 批量判断Name列第二位(索引从0开始)是否为'h',筛选匹配行
filtered_df = df[df['Name'].str[1] == 'h']
print(filtered_df)

关键逻辑说明:

  • 借助Pandas内置的.str访问器,可以对整列所有字符串元素批量执行切片、取字符操作,和单条Python字符串的操作逻辑完全一致
  • 字符串索引默认从0开始计数,需求中的“第二位字符”对应索引值为1,因此用df['Name'].str[1]就能批量提取每一行Name列对应位置的字符
  • 判断后生成的布尔型Series传入DataFrame的索引位置,即可直接筛选出符合条件的整行数据,对示例表执行后会直接返回Charizard对应的行

循环版本的修正写法

如果需要通过遍历实现逻辑,修正后的可运行代码如下:

import pandas as pd
df = pd.read_excel(r'C:\Users\Name\Desktop\pokemon.xlsx')
matched_index = []
# 遍历过程同时获取行索引和对应的Name值
for row_idx, name in df['Name'].items():
    # 先校验字符串长度和类型,避免遇到空值、短字符串时报索引越界错误
    if isinstance(name, str) and len(name) > 1 and name[1] == 'h':
        matched_index.append(row_idx)
# 批量取出所有匹配行
filtered_df = df.loc[matched_index]
print(filtered_df)

注意:写循环遍历处理Pandas列时,尽量不要在循环内反复对原表做修改或打印操作,提前收集匹配的索引值、最后统一取数,能大幅提升执行效率。

内容的提问来源于stack exchange,提问作者Ved Brahmbhatt

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.11.11 21:45:04