Pandas read_excel返回'没有足够的值来解包(预期2,得到1)'

时间:2018-02-15 17:54:51

标签: python pandas dataframe python-import

我的问题非常简单,我只是想尝试使用pandas将本地定位的excel文件读入数据框。

filename = 'test.xlsx'
df = pd.read_excel(filename)

xlsx文件有多个工作表,但是我得到了相同的“ValueError:没有足够的值来解包(预期2,得到1)”,即使指定了工作表名称。

  

追踪(最近一次呼叫最后一次):

     

文件“”,第1行,in       pd.read_excel(文件名)

     

文件   “C:\ ProgramData \ Anaconda3 \ lib \ site-packages \ pandas \ io \ excel.py”,line   200,在read_excel中       io = ExcelFile(io,engine = engine)

     

文件   “C:\ ProgramData \ Anaconda3 \ lib \ site-packages \ pandas \ io \ excel.py”,line   257,在 init 中       self.book = xlrd.open_workbook(io)

     

文件“C:\ ProgramData \ Anaconda3 \ lib \ site-packages \ xlrd__init __。py”,   第422行,在open_workbook中       ragged_rows = ragged_rows,

     

文件“C:\ ProgramData \ Anaconda3 \ lib \ site-packages \ xlrd \ xlsx.py”,行   833,在open_workbook_2007_xml中       x12sheet.process_stream(zflo,heading)

     

文件“C:\ ProgramData \ Anaconda3 \ lib \ site-packages \ xlrd \ xlsx.py”,行   553,在own_process_stream中       self.do_merge_cell(ELEM)

     

文件“C:\ ProgramData \ Anaconda3 \ lib \ site-packages \ xlrd \ xlsx.py”,行   609,在do_merge_cell中       first_cell_ref,last_cell_ref = ref.split(':')

     

ValueError:没有足够的值来解包(预期2,得到1)

编辑:我创建了一个新的Excel文件,并将原始文件中的两个选项卡复制到新的Excel文件中。 Pandas read_excel使用了新文件。但是,我希望能够使用原始版本。

2 个答案:

答案 0 :(得分:1)

我仍然不完全理解这个问题的机制,但我能够解决它。我使用urllib.requests中的urlopen在本地下载文件,并使用openpyxl加载工作簿,然后加载我想要的工作表。该表在顶部有5行合并单元,在底部有5行合并单元。然后,我使用unmerge_cells方法合并仅合并单元格的最后5行。然后,我再次使用修改后的工作表保存了工作簿。然后我能够使用skiprows = 5参数运行pd.read_excel。它以这种方式工作。

答案 1 :(得分:0)

可能的解决方法如下:

import openpyxl

wb1 = openpyxl.load_workbook('filename.xlsx') ## opening the file
sheets_list = list(wb1.get_sheet_names()) ## getting all sheets' streams
active_sheet = wb1.get_sheet_by_name(sheets_list[0]) ## picking up the first sheet

df1 = pd.DataFrame(active_sheet.values)

df1 = df1.iloc[3 : , :] ## skipping first three rows assuming merged cells are in 
                        ## this range