2013-03-28 121 views
1

我无法使用ExcelFile()将excel文件加载到数据框中。我导入了熊猫,xlrd和openpyxl。我正在使用spyder进行交互式数据分析。 我是熊猫和蟒蛇的新手,所以我会教一个初学者可以理解的答案。有人能帮助我吗?导入excel文件错误python pandas

>>> import xlrd 
>>> import openpyxl 
>>> from pandas import * 
>>> xls = ExcelFile('C:\RWFC\test.xls') 
Traceback (most recent call last): 
File "<stdin>", line 1, in <module> 
File "C:\Python27\lib\site-packages\pandas\io\parsers.py", line 1294, in __init__ 
self.book = xlrd.open_workbook(path_or_buf) 
File "C:\Python27\lib\site-packages\xlrd\__init__.py", line 400, in open_workbook 
f = open(filename, "rb") 
IOError: [Errno 22] invalid mode ('rb') or filename: 'C:\\RWFC\test.xls' 
+0

尝试使用原始字符串转义您的路径:'xls = ExcelFile(r'C:\ RWFC \ test.xls')'或双反斜杠:'xls = ExcelFile('C:\\ RWFC \\ test。 XLS')'。 – Fenikso

回答

3

的问题是在这条线:

>>> xls = ExcelFile('C:\RWFC\test.xls') 

反斜杠有特殊的意义。例如,在一个正常的字符串中的字符“\ t”为制表符:

>>> "\t" 
'\t' 
>>> len("\t") 
1 

这就是为什么在你的错误信息:

IOError: [Errno 22] invalid mode ('rb') or filename: 'C:\\RWFC\test.xls' 

您在R看到前面一个双斜杠 - - \R没有任何特殊意义,因此它知道你的意思是一个“真正的”斜线:

>>> s = "\\" 
>>> s 
'\\' 
>>> print s 
\ 
>>> len(s) 
1 

\t确实有特殊的意义。为了解决这个问题,你可以使用一个“原始字符串”和字符串字面前加“R”:

>>> "C:\RWFC\test.xls" 
'C:\\RWFC\test.xls' 
>>> r"C:\RWFC\test.xls" 
'C:\\RWFC\\test.xls' 

或者,你可以简单地使用正斜杠,而不是 - 这Windows支持 - 和避免一切麻烦:

>>> "C:/RWFC/test.xls" 
'C:/RWFC/test.xls' 

无论哪种方式应该工作。

+0

在Windows支持的路径中真的是正斜杠还是更像是对Windows的Python实现的支持? – Fenikso

+0

@Fenikso:据我所知,完整的故事有点复杂 - 请参阅此主题[http://mail.python.org/pipermail/python-list/2003-September/204269.html] 。我认为它基本归结为:“/”几乎一直被认为是DOS天以后的路径分隔符,但是Windows命令控制台通常会拒绝它,因为它们将它用作选项标志,因此人们认为它是被禁止的。不过,我只是一个偶尔的Windows用户,所以不要在历史上留下我的话。 – DSM

+0

感谢您的意见。我通过在路径中添加一个x来解决它 – jonas

0

我有类似的问题。我这样解决了这个问题:

path = r"Drive:\path\to\your\file.extension" 
workbook = xlrd.open_workbook(path) ##assuming you have imported xlrd already 

希望这有助于。 :)