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

Pandas中str.slice无法正确提取学生ID的问题求助

正确提取学生ID的方法

你的问题出在循环赋值时会反复覆盖整个Student ID列,且str.slice传入标量索引时会对所有行统一切片,导致结果错误。推荐用正则匹配或者拆分筛选的方法,无需手动计算索引,更精准且通用。

方法一:正则表达式提取(推荐)

学生ID有固定格式(以1开头,由字母+数字组成,长度7位),直接用str.extract匹配该模式即可:

import pandas as pd

d = {'Student Name': ['Omar 17BE004', '17BE005 Hussain', '17BE006 Anwar Syed']}
df_test = pd.DataFrame(data=d)

# 正则规则:匹配以1开头、后续6位为字母/数字的连续字符串
df_test['Student ID'] = df_test['Student Name'].str.extract(r'(1[A-Z0-9]{6})')

print(df_test)

运行结果:

Student Name Student ID
0        Omar 17BE004    17BE004
1     17BE005 Hussain    17BE005
2  17BE006 Anwar Syed    17BE006

方法二:拆分字符串后筛选

如果ID和姓名始终用空格分隔,也可以拆分字符串为列表,再筛选符合格式的元素:

import pandas as pd

d = {'Student Name': ['Omar 17BE004', '17BE005 Hussain', '17BE006 Anwar Syed']}
df_test = pd.DataFrame(data=d)

def pick_student_id(name_str):
    for segment in name_str.split():
        # 筛选以1开头、长度为7的片段
        if segment.startswith('1') and len(segment) == 7:
            return segment
    return None

df_test['Student ID'] = df_test['Student Name'].apply(pick_student_id)

原代码出错原因

你循环中每次赋值都会覆盖整个Student ID列,最终只保留最后一次循环的切片结果;且str.slice传入单个索引值时,会对所有行应用同一切片范围,导致第一行被错误截取。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.12 19:35:15