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

如何用Pandas从非规范化.db文件生成规范化df_exams DataFrame

解决方法

你的问题出在正则表达式写得不对,而且没先把多考试条目拆成单独行。按下面步骤来就能搞定:

步骤1:拆分Exams列并展开成单行记录

首先把每个学生的多个考试条目拆分开,让每行对应一个考试:

# 按逗号拆分Exams列,然后展开成多行
df_exams = df_exams.assign(Exams=df_exams['Exams'].str.split(',')).explode('Exams')
# 清理每个考试条目的前后空格(比如"exam1 (2023), exam2(2024)"拆分后可能带空格)
df_exams['Exams'] = df_exams['Exams'].str.strip()

步骤2:正确提取Exam和Year

用适配两种格式(带空格/不带空格)的正则表达式来提取内容:

# 正则匹配"examX (YYYY)"或"examX(YYYY)"格式,捕获考试名称和年份
df_exams[['Exam', 'Year']] = df_exams['Exams'].str.extract(r'^(exam\d+)\s?\((\d{4})\)$', expand=True)
# 删掉原来的Exams列(可选,按需保留)
df_exams = df_exams.drop('Exams', axis=1)

原代码问题说明

你之前用的(.)\s\((.\d+)正则有两个致命问题:

  • (.)只能匹配单个字符,根本抓不到完整的examX
  • .\d+写法错误,而且没处理括号前可选的空格,年份应该用\d{4}精准匹配四位数字

这样处理后,你的DataFrame就会变成每行对应一个学生的一条考试记录,包含Student ID、Exam、Year三列。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.07 12:05:15