我正在尝试使用pandas将xlsx文件读入python 我之前已经完成了数千次,但有些原因是它没有使用特定文件。
该文件是从另一个源下载的,当我用pandas阅读时,我得到一个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)
为了完整起见,我有一个类似的问题,第一行的行号不正确,我修改了我的问题,改变了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)
显然xlrd中有一个修复underway
答案 1 :(得分:0)
在我的情况下,我使用xlrd包读取excel,但遇到了相同的Assertion错误。 从站点程序包和打开的sheet.py(https://github.com/python-excel/xlrd/blob/master/xlrd/sheet.py)
中打开xlrd程序包在sheet.py中找到此代码
if self.biff_version >= 80:
self.utter_max_rows = 65536
else:
self.utter_max_rows = 16384
将以上内容转换为...
#if self.biff_version >= 80:
self.utter_max_rows = 65536
#else:
# self.utter_max_rows = 16384
现在尝试运行您的程序... 问题将解决..:)
答案 2 :(得分:0)
遇到相同的问题,我在窗口上以xml格式保存文件:“另存为类型:XML Spreadsheet 2003”。然后,我打开文件并另存为xlsx格式。新文件不再显示错误消息。
答案 3 :(得分:0)
文件中包含韩文字符。这些需要替代编码。 在read_excel()方法中使用“ encoding”参数可以解决该问题。
df = pandas.read_excel(路径文件,工作表名称为“ Sheet1”,编码为“ utf-16”)
答案 4 :(得分:0)
有时候,只需在Excel中删除表格下方的(空白)行即可解决此问题。
答案 5 :(得分:0)
在系统中查找文件xlsx.py。
在您的计算机上,它显然位于C:\ Python \ python-3.4.4.amd64 \ lib \ site-packages \ xlrd \ xlsx.py
搜索该行:
X12_MAX_ROWS = 2 ** 20
并将其更改为类似
X12_MAX_ROWS = 2 ** 22
这会将行数限制从100万行增加到400万行。