我有一个数据框架,其中包含有关学生成绩、考试成绩和其他指标的信息。其中一列包含逗号分隔的文本,其中每个逗号分隔的值都是数学类的名称以及学生在该类中取得的成绩。因此,数据框如下所示:
STUDENT_ID TEST_SCORE_1 TEST_SCORE_2 MATHS
001 85 93 ALGEBRA_B+,GEOMETRY_A-,TRIGONOMETRY_C
002 73 95 ALGEBRA_B,GEOMETRY_B+,CALCULUS_C
我想要的是每个类都有对应的列,只需要有包含等级的单元格,如下所示:
STUDENT_ID TEST_SCORE_1 TEST_SCORE_2 ALGEBRA GEOMETRY TRIGONOMETRY CALCULUS
001 85 93 B+ A- C NaN
002 73 95 B B+ NaN C
我第一次尝试这样做
df.merge(df['Maths'].apply(unpack_grades), left_index=True, right_index=True)
其中unpack_grades是一个函数,它解析类和年级字符串,并返回一个pandas系列,其中包含目录中的每门数学课程,作为键,分数作为值(如果学生没有上课,则为NaN)。以下是该函数的开头:
def unpack_grades(x):
courses = [a.strip() for a in x.split(',')]
但是,我得到以下错误:
AttributeError: 'float' object has no attribute 'split'
如果有人能为我的错误提出一个解决方案,或者如果有更直接的方法来实现我的目标,那就太好了
您可以在这里使用正则表达式和
pivot
正则表达式解释
相关问题 更多 >
编程相关推荐