我的问题非常简单,我只是想尝试使用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使用了新文件。但是,我希望能够使用原始版本。
答案 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