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
相关产品推荐
相关产品推荐

