2016-05-27 75 views
0

我正在尝试使用pandas将xlsx文件读入python。
我已经完成了这个数千次之前,但由于某些原因,它不适用于某个特定的文件。AssertionError with pandas when reading excel

该文件被从其它源下载和我得到一个AssertionError(见端)与熊猫读取时:

df = pandas.read_excel(pathtomyfile, sheetname = "Sheet1") 

该变量用于路径定义。路径存在(os.path.exists(path)返回True)。

当我复制文件的内容并将值粘贴到新的excel文档中时,这个新文档将使用read_excel()方法打开。

当我复制文件的内容并将格式粘贴到一个新的excel 中时,这个新文件将以read_excel()方法打开。

它似乎不是值或格式。

我猜这可能是一个编码问题?
谢谢你的帮助。

df1 = pandas.read_excel(snap1) 
File "C:\Python\python-3.4.4.amd64\lib\site-packages\pandas\io\excel.py", line 163, in read_excel 
    io = ExcelFile(io, engine=engine) 
File "C:\Python\python-3.4.4.amd64\lib\site-packages\pandas\io\excel.py", line 206, in __init__ 
    self.book = xlrd.open_workbook(io) 
File "C:\Python\python-3.4.4.amd64\lib\site-packages\xlrd\__init__.py", line 422, in open_workbook 
    ragged_rows=ragged_rows, 
File "C:\Python\python-3.4.4.amd64\lib\site-packages\xlrd\xlsx.py", line 794, in open_workbook_2007_xml 
    x12sheet.process_stream(zflo, heading) 
File "C:\Python\python-3.4.4.amd64\lib\site-packages\xlrd\xlsx.py", line 531, in own_process_stream 
    self_do_row(elem) 
File "C:\Python\python-3.4.4.amd64\lib\site-packages\xlrd\xlsx.py", line 597, in do_row 
    assert 0 <= self.rowx < X12_MAX_ROWS 
AssertionError 
+0

基于断言检查为'0 <= self.rowx

+1

不仅82行长,3列 – Eoin

+0

那么是否有可能在文件中出现超出限制的杂散值方式?如果您备份内容,选择全部并删除,然后粘贴回内容怎么办? –

回答

0

只是为了保持完整性,我也有类似的问题,其中第一行的行号是不正确的,我通过改变XLSX文件的代码改编自this answer

def repair_broken_excelfile(zipfname, *filenames, new_name=None): 
    # https://stackoverflow.com/a/4653863/1562285 
    import tempfile 
    import zipfile 
    import shutil 
    import os 
    tempdir = tempfile.mkdtemp() 
    try: 
     tempname = os.path.join(tempdir, 'new.zip') 
     with zipfile.ZipFile(zipfname, 'r') as zipread: 
      with zipfile.ZipFile(tempname, 'w') as zipwrite: 
       for item in zipread.infolist(): 
        print('fn: ' + item.filename) 
        if item.filename not in filenames: 
         data = zipread.read(item.filename) 

         zipwrite.writestr(item, data) 
        else: 

         data = zipread.read(item.filename) 
         data = data.replace(b'<row r="0" spans="">', b'<row r="1" spans="">') 
         zipwrite.writestr(item, data) 
         pass 
     if not new_name: 
      new_name = zipfname 
     shutil.move(tempname, new_name) 
    finally: 
     shutil.rmtree(tempdir) 

显然有固定我的问题是一个修复underway在xlrd