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

基于Excel文件生成每行对应字典的Python技术问题求助

解决Excel行转字典列表的问题

看起来你现在的问题是没能正确遍历Excel的每一行并生成独立的字典,我来帮你修正代码并解释问题所在。

修正后的代码

首先,我们用更简洁的方式遍历DataFrame的每一行,并且为每行生成一个完整的事件字典,最后收集到列表中:

import pandas as pd

# 读取Excel文件,header=1表示用第二行作为列名
df = pd.read_excel('http://administracja.sgh.waw.pl/en/dsm/schedules/session/Documents/SMMB%2020172%20-%20changes%2017.05.18.xls', header=1)

# 初始化一个空列表用于存储所有事件字典
events_list = []

# 遍历DataFrame的每一行
for index, row in df.iterrows():
    # 跳过空行(如果存在的话)
    if pd.isna(row.iloc[0]):
        continue
    
    # 构建单个事件字典,根据你的需求组合字段
    event = {
        'summary': row.iloc[0],  # 第一列作为summary
        'location': row.iloc[5],  # 假设位置在第6列(索引5),可根据实际列调整
        'start': {
            'dateTime': f"{row[6].replace(';', ' ')} {row[3]}"  # 组合日期和开始时间
        },
        'end': {
            'dateTime': f"{row[6].replace(';', ' ')} {row[4]}"  # 组合日期和结束时间
        }
    }
    
    # 将当前事件字典加入列表
    events_list.append(event)

# 输出结果查看
print(events_list)

原代码的问题分析

  • 遍历方式不当:你用while循环配合iloc[n]的方式不够直观且容易出错,df.iterrows()是Pandas中遍历行的标准方法,能直接获取每行的索引和数据。
  • 不必要的内层循环:for row in events会遍历当前行的每个单元格,这完全没必要——我们只需要从指定列提取值即可。
  • 字典拆分与未收集:你把summary、start、end拆成了多个独立字典,而且没有将生成的事件字典存入列表,导致每次循环都会覆盖之前的结果。

优化建议

为了让代码更健壮,建议使用列名而非索引来取值(避免列顺序变化导致错误)。你可以先打印列名确认:

print(df.columns)

然后替换成类似这样的写法:

event = {
    'summary': row['Course Code and Name'],  # 替换为实际列名
    'location': row['Room'],  # 替换为实际列名
    'start': {
        'dateTime': f"{row['Date'].replace(';', ' ')} {row['Start Time']}"
    },
    'end': {
        'dateTime': f"{row['Date'].replace(';', ' ')} {row['End Time']}"
    }
}

这样代码可读性更强,也更不容易出错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.29 07:35:15