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 文件下载完整行 [重复]