FFZ0706 2024-06-20 09:28 采纳率: 38.6%
浏览 4

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

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

img

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

img

将姓名行合成为一行,如果该考生考了这科,就标为1,并写上对应的分数,没考就为空

  • 写回答

2条回答 默认 最新

  • 专家-赤兔[在线] 优质创作者: 编程框架技术领域 2024-06-20 09:28
    关注

    引自免费微信小程序:皆我百晓生

    要处理这个问题,我们可以使用Python的pandas库来读取Excel文件,并进行相应的数据转换。首先确保你已经安装了pandasopenpyxl库,如果没有的话,可以通过pip安装:

    pip install pandas openpyxl
    

    接下来,我们可以按照以下步骤来操作Excel文件:

    1. 读取Excel文件。
    2. 对数据进行清洗和转换。
    3. 将结果保存回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文件中的数据格式与提供的示例一致。

    评论 编辑记录

报告相同问题?

问题事件

  • 创建了问题 6月20日