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

Pandas代码报错:writer.save()触发SyntaxError无效语法问题求助

解决Pandas拆分数据到Excel多工作表的语法错误问题

嘿,我一眼就看出问题出在哪了——这是Python里最容易踩的缩进语法坑!你的for循环代码没有正确缩进,而且把本该分开的逻辑挤在了同一行,导致Python解释器没法识别循环体的范围,所以抛出了SyntaxError。

错误原因拆解

你把for循环的所有操作都写在了同一行,而且writer.save()的位置也不对。Python是靠缩进划分代码块的,for循环里的每一行操作都得缩进,而保存文件的步骤要等所有工作表都写完再执行,必须放在循环外面。

修正后的完整可运行代码

import pandas as pd

# 读取CSV数据,记得补充完整你的列名
df = pd.read_csv('XXX.csv', names=['Teacher_name', '其他列1', '其他列2'])
# 教师列表,也可以自动提取:mn = df['Teacher_name'].unique().tolist()
mn = ['Teacher A', 'Teacher B', 'Teacher C']

# 初始化Excel写入器
writer = pd.ExcelWriter("MyData.xlsx", engine='xlsxwriter')

# 循环拆分并写入数据
for myname in mn:
    # 筛选当前教师的所有数据
    mydf = df.loc[df.Teacher_name == myname]
    # 写入对应的工作表
    mydf.to_excel(writer, sheet_name=myname)

# 所有工作表写完后,统一保存关闭
writer.save()

几个关键提醒

  • 缩进是Python的灵魂:循环体里的代码必须缩进(一般用4个空格),不然Python不知道哪些代码属于循环内的操作。
  • writer.save()别放循环里:如果把这行放进循环,每次循环都会保存一次,不仅效率低,还可能导致文件损坏,必须等所有工作表都写入完成后再执行。
  • 自动生成教师列表更靠谱:如果你的CSV里教师名字有变动,手动写mn很容易漏,用mn = df['Teacher_name'].unique().tolist()可以自动提取所有唯一的教师名称,更灵活。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:42:26