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
相关产品推荐
相关产品推荐

