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

在Django中用Pandas读取Excel:如何保留未被覆盖的重复数据?

解决Django中读取Excel重复成绩数据被字典覆盖的问题

问题根源

Python字典的键具有唯一性,当你用dict(zip(成绩列, 日期列))时,重复的成绩(键)会被后续出现的同成绩对应的日期覆盖,导致只保留最后一个匹配的日期。

解决方案:将键对应的值改为列表

要保留所有重复成绩对应的日期,需要把GradesWDates改成**成绩: [日期1, 日期2, ...]**的结构,下面提供两种实现方式:

方法1:手动循环处理(直观易懂)

遍历成绩和日期的配对,遇到重复成绩时就把日期追加到对应列表中:

# 以Evan为例
evan_grades = Database.Evan
evan_dates = Database.Date

grades_with_dates = {}
for grade, date in zip(evan_grades, evan_dates):
    # 跳过空值(可选,根据你的Excel数据情况调整)
    if pd.isna(grade) or pd.isna(date):
        continue
    if grade not in grades_with_dates:
        grades_with_dates[grade] = []
    grades_with_dates[grade].append(date)

# 创建Evan对象
Evan = skimask('Evan', grades_with_dates, "B", 0, 0, "./static/media/evan1.png", list(Database.EvanNext), [], 0)

方法2:用Pandas GroupBy简化代码(高效简洁)

利用Pandas的分组功能,直接把同一成绩对应的日期聚合为列表:

# 以Evan为例,先筛选有效数据(去掉空值)
evan_data = Database[['Evan', 'Date']].dropna()
# 按成绩分组,把日期转成列表后转成字典
grades_with_dates = evan_data.groupby('Evan')['Date'].apply(list).to_dict()

# 创建Evan对象
Evan = skimask('Evan', grades_with_dates, "B", 0, 0, "./static/media/evan1.png", list(Database.EvanNext), [], 0)

批量处理所有学生

如果要简化所有学生的代码,可以写一个循环来生成Students列表,避免重复代码:

students_config = [
    ('Evan', "B", "./static/media/evan1.png", 'EvanNext'),
    ('Felix', "B+", "./static/media/felix.png", 'FelixNext'),
    ('Hessel', "A+", "./static/media/hessel2.png", 'HesselNext'),
    ('Niels', "B", "./static/media/niels.png", 'NielsNext'),
    ('Sem', "A", "./static/media/sem1.png", 'SemNext'),
]

Students = []
for name, motive, pfp, next_col in students_config:
    # 用GroupBy生成成绩-日期列表字典
    student_data = Database[[name, 'Date']].dropna()
    grades_with_dates = student_data.groupby(name)['Date'].apply(list).to_dict()
    # 创建对象并加入列表
    student = skimask(
        name, grades_with_dates, motive, 0, 0, pfp,
        list(Database[next_col]), [], 0
    )
    Students.append(student)

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 12:27:54