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

Posted

技术标签:

【中文标题】Pandas read_excel 返回\'没有足够的值来解包(预期 2,得到 1)\'【英文标题】:Pandas read_excel returning 'not enough values to unpack (expected 2, got 1)'Pandas read_excel 返回'没有足够的值来解包(预期 2,得到 1)' 【发布时间】:2018-07-26 13:53:27 【问题描述】:

我的问题很简单,我只是想使用 pandas 将本地的 excel 文件读入数据框。

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

xlsx 文件有多个工作表,但我得到相同的 "ValueError: not enough values to unpack (expected 2, got 1)" 即使指定工作表名。

Traceback(最近一次调用最后一次):

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

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

文件 “C:\ProgramData\Anaconda3\lib\site-packages\pandas\io\excel.py”,行 257,在 初始化 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, 标题)

文件“C:\ProgramData\Anaconda3\lib\site-packages\xlrd\xlsx.py”,行 第553章 self.do_merge_cell(elem)

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

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

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

【问题讨论】:

你能发布完整的回溯吗? @FHTMitchell 已添加。 谢谢。这很奇怪。这是什么版本的python和pandas? 你的excel文件里有没有异常的公式?看起来它试图评估公式中的范围(通常看起来像 A1:B2),但找不到 : 字符。 @FHTMitchell Python 3.6,熊猫 0.20.1 【参考方案1】:

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

【讨论】:

【参考方案2】:

可能的解决方法如下:

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

【讨论】:

以上是关于Pandas read_excel 返回'没有足够的值来解包(预期 2,得到 1)'的主要内容,如果未能解决你的问题,请参考以下文章

pandas中pd.read_excel()方法中的converters参数

在pandas read_excel中获取Excel单元格背景颜色?

无法使用 Pandas read_excel() 为 xlsx 文件下载完整行 [重复]

编码参数是不是适用于 pandas.read_excel?

通过 pandas.read_excel 在标题后跳过行范围

请问在Pandas用read_excel函数读取数据