2013-03-28 87 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 

希望這有助於。 :)