目前遇到的情况是这样同事发给我的文件是这样的

每个人考的科目以及分数都是不同的,姓名是多行
请问该怎么将数据处理成这样

将姓名行合成为一行,如果该考生考了这科,就标为1,并写上对应的分数,没考就为空
目前遇到的情况是这样同事发给我的文件是这样的

每个人考的科目以及分数都是不同的,姓名是多行
请问该怎么将数据处理成这样

将姓名行合成为一行,如果该考生考了这科,就标为1,并写上对应的分数,没考就为空
关注引自免费微信小程序:皆我百晓生
要处理这个问题,我们可以使用Python的pandas库来读取Excel文件,并进行相应的数据转换。首先确保你已经安装了pandas和openpyxl库,如果没有的话,可以通过pip安装:
pip install pandas openpyxl
接下来,我们可以按照以下步骤来操作Excel文件:
以下是具体的Python代码示例:
import pandas as pd
# 读取Excel文件
df = pd.read_excel('你的文件名.xlsx', engine='openpyxl')
# 数据清洗和转换
# 假设第一行是标题行,数据从第二行开始
df_new = pd.DataFrame() # 创建一个新的DataFrame来存储转换后的数据
for index, row in df.iloc[1:].iterrows(): # 从第二行开始迭代每一行数据
name = row['姓名'] # 获取姓名
subjects = df.loc[df['姓名'] == name, ['科目']] # 获取该学生的所有科目
scores = df.loc[df['姓名'] == name, ['分数']] # 获取该学生的所有分数
is_exam = [] # 用于记录是否参加了各科考试的列表
for i, subject in enumerate(subjects['科目']): # 遍历学生的每一科
if pd.notna(scores['分数'].iloc[i]): # 如果分数不为空,表示参加了该科考试
is_exam.append(1) # 添加标记1表示参加了考试
scores_val = scores['分数'].iloc[i] # 获取分数值
else:
is_exam.append('') # 添加空标记表示没有参加考试
scores_val = '' # 分数为空字符串表示没有分数信息
df_new = df_new.append({'姓名': name, '是否考' + subject: is_exam[-1], '分数': scores_val}, ignore_index=True) # 将结果添加到新的DataFrame中
# 保存结果到新的Excel文件或覆盖原文件(注意备份原文件)
df_new.to_excel('处理后的文件名.xlsx', index=False, engine='openpyxl') # index=False表示不保存索引列到Excel文件
这段代码会将数据从原始格式转换为所需格式,并将结果保存到一个新的Excel文件中。记得将'你的文件名.xlsx'替换为你实际的文件名,并将'处理后的文件名.xlsx'替换为你想要保存的新文件名。在运行此代码之前,请确保你的Excel文件中的数据格式与提供的示例一致。