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

