Python Pandas导出Excel时出现错误。

4

我有一个数据框,想要将其导出到Excel。我是Python和Pandas的新手,所以需要在这个简单的任务上得到一些帮助。

df2.to_excel('C:\BT\stack_test3.xlsx')

错误信息:
IOError: [Errno 13] 权限被拒绝:'C:\BT\stack_test3.xlsx'

你确定你的代码是正确的吗?难道你不应该使用这样的语句:df2.to_excel(r'C:\BT\stack_test3.xlsx')吗?因为我认为你的路径是错误的,而且Python认为你正在写入c:,因为你的反斜杠没有被转义。 - EdChum
添加 r 前缀是否解决了您的问题? - EdChum
不好意思,没有...有什么新的想法吗? - jonas
你可以检查访问权限,也可以尝试使用不同的扩展名,如.xls,.xlsx使用openpyxl,而.xls扩展名使用xlwt,有趣的是看看这是否是两个库都存在的问题。 - EdChum
我已经尝试过向关闭和打开的文件写入,但问题仍然存在... - jonas
显示剩余3条评论
5个回答

9

您的路径不正确,因为您没有转义斜杠,它认为您正在尝试写入C:驱动器的根目录,请使用以下内容:

df2.to_excel(r'C:\BT\stack_test3.xlsx')
r 会将路径转换为原始字符串,这意味着您不需要转义斜杠。 编辑 看起来在使用 openpyxl 时出现了一些错误。
df2.to_excel(r'C:\BT\stack_test3.xls')

使用xlwt的作品,我对这些包不太了解,所以可能是openpyxl存在权限问题,但我没有找到任何相关信息或是一个bug。


@7stud 表示 c:\,如果你喜欢磁盘驱动器的根或基础,Vista 及以上版本可能不允许应用程序写入系统磁盘的根目录,除非它具有足够的特权。 - EdChum
但是文档说...与标准C不同,所有未识别的转义序列都会保留在字符串中,即反斜杠会保留在字符串中;如果您尝试:`s = 'A\B\C' print ord("\")for ch in s: print ord(ch)` 您将看到反斜杠在字符串中。因此,只有当\B或\s是已识别的转义序列时,反斜杠才会创建问题,而且两者都不是已识别的转义序列。操作员应该始终使用原始字符串以避免任何潜在问题,或者使用正斜杠,但我不认为这条特定路径存在问题。 - 7stud
甚至更简单的方法是尝试:print len('A\B\C')。与 print len('C:\b\a') 进行比较。 - 7stud
@7stud 我没有xls writer模块,但我刚刚尝试了to_csv'而没有使用r前缀,结果出现了[Errno 22] invalid mode ('w') or filename错误,添加r前缀可以解决这个问题。顺便说一下,如果不使用r前缀展开路径,则中间的斜杠不会被展开,因此c:\\BT\stack_test3.xlsx将被显示。如果添加r`前缀无法解决您的问题,那么我将删除我的答案。 - EdChum
即使这不能解决提问者的问题,它也可能会解决其他在谷歌上找到这个问题的人的问题,请不要删除它。 - Andy Hayden
显示剩余6条评论

4

我曾经遇到过同样的问题。原来是因为在我尝试写入Excel文件时,它仍然保持打开状态。显然,它不喜欢这样的做法。如果你的文件仍然处于打开状态,请尝试关闭它。


1

为了确认,在您继续操作之前,请确保您尝试保存的Excel文件未被打开,或者为了安全起见,关闭所有Excel并再次尝试保存。

这样应该就可以了。


0

你应该写入另一个驱动器,比如'D:',因为在Windows Vista或更高版本的操作系统中,你没有权限写入'C:\',而且也没有理由去获取这个权限。


-1

关闭所有Excel实例并运行Python代码后,程序可以正常工作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接