• ValueError: row index was 65536, not allowed by .xls format


    报错:ValueError: row index was 65536, not allowed by .xls format

    读取.xls文件正常,在写.xls文件,pd.to_excel()时候会报错

    原因:写入的文件行数大于65536

    Pandas 读取 Excel 文件的引擎是 xlrd ,xlrd 虽然同时支持 .xlsx 和 .xls 两种文件格式,但是在源码文件 xlrd/sheet.py 中限制了读取的 Excel 文件行数必须小于 65536,列数必须小于 256。

    xlrd和xlwt处理的是xls文件,单个sheet最大行数是65535,如果有更大需要的,建议使用openpyxl函数,最大行数达到1048576。
    如果数据量超过65535就会遇到:ValueError: row index was 65536, not allowed by .xls format

    解决:

    方法1: 直接使用openpyxl

    import openpyxl
    
    def readExel():
        filename = r'D:	est.xlsx'
        inwb = openpyxl.load_workbook(filename)  # 读文件
        sheetnames = inwb.get_sheet_names()  # 获取读文件中所有的sheet,通过名字的方式
        ws = inwb.get_sheet_by_name(sheetnames[0])  # 获取第一个sheet内容
    
        # 获取sheet的最大行数和列数
        rows = ws.max_row
        cols = ws.max_column
        for r in range(1,rows):
            for c in range(1,cols):
                print(ws.cell(r,c).value)
            if r==10:
                break
    
    def writeExcel():
        outwb = openpyxl.Workbook()  # 打开一个将写的文件
        outws = outwb.create_sheet(index=0)  # 在将写的文件创建sheet
        for row in range(1,70000):
            for col in range(1,4):
                outws.cell(row, col).value = row*2  # 写文件
            print(row)
        saveExcel = "D:\test2.xlsx"
        outwb.save(saveExcel)  # 一定要记得保存
    

    方法2:Pandas 的 read_excel 方法中,有 engine 字段,可以指定所使用的处理 Excel 文件的引擎,填入 openpyxl ,再读取文件就可以了。

    import pandas as pd
    
    df = pd.read_excel(‘./data.xlsx’, engine=’openpyxl’)  

    pd.write( ,engine=’openpyxl’)
  • 相关阅读:
    [HAOI2016]食物链
    [TJOI2011]序列
    P2548 [AHOI2004]智能探险车
    [JSOI2008]最大数
    模板之dinic
    Excim的NOIP2017游记
    数列排序
    Car的旅行路线
    [HAOI2006]均分数据
    [luogu2210] Haywire
  • 原文地址:https://www.cnblogs.com/zwp-627/p/11751958.html
Copyright © 2020-2023  润新知