场景

今天需要合并天猫订单数据,由于前期6.18活动有很多数据需要处理,将几个月份合并一起,结果报错。

问题分析

Excel 文件的格式曾经发生过一次变化,在 Excel 2007 以前,使用扩展名为 .xls 格式的文件,这种文件格式是一种特定的二进制格式,最多支持 65,536 行,256 列表格。从 Excel 2007 版开始,默认采用了基于 XML 的新的文件格式 .xlsx ,支持的表格行数达到了 1,048,576,列数达到了 16,384。需要注意的是,将 .xlsx 格式的文件转换为 .xls 格式的文件时,65536 行和 256 列之后的数据都会被丢弃。

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

if self.biff_version >= 80:

self.utter_max_rows = 65536

else:

self.utter_max_rows = 16384

self.utter_max_cols = 256

这就导致,即使是 .xlsx 格式的文件, xlrd 依然不支持读取 65536 行以上的 Excel 文件(源码中还有一个行数限制是 16384,这是因为 Excel 95 时代, xls 文件所支持的最大行数是 16384)。

解决办法

openpyxl 是一个专门用来操作 .xlsx 格式文件的 Python 库,和 xlrd 相比它对于最大行列数的支持和 .xlsx 文件所定义的最大行列数一致。

首先安装 openpyxl :

pip install openpyxl

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

import os

import pandas as pd

# 将文件读取出来放一个列表里面

pwd = '1' # 获取文件目录

# 新建列表,存放文件名

file_list = []

# 新建列表存放每个文件数据(依次读取多个相同结构的Excel文件并创建DataFrame)

dfs = []

for root,dirs,files in os.walk(pwd): # 第一个为起始路径,第二个为起始路径下的文件夹,第三个是起始路径下的文件。

for file in files:

file_path = os.path.join(root, file)

file_list.append(file_path) # 使用os.path.join(dirpath, name)得到全路径

df = pd.read_excel(file_path) # 导入xlsx文件,将excel转换成DataFrame

dfs.append(df)

# 将多个DataFrame合并为一个

df = pd.concat(dfs)

# 数据输出,写入excel文件,不包含索引数据

# 数据写入 Excel,需要首先安装一个 engine,由 engine 负责将数据写入 Excel,pandas 使用 openpyx 或 xlsxwriter 作为写入引擎。

df.to_excel('test\\1.xlsx', index=False,engine='openpyxl') # 导出 Excel,一般不需要索引,将 index 参数设为 False

补充知识:python使用xlrd读取excel数据作为requests的请求参数,并把返回的数据写入excel中

实现功能:

从excel中的第一列数据作为post请求的数据,数据为json格式;把post返回的结果写入到excel的第二列数据中,并把返回数据与excel中的预期结果做比较,如果与预期一致则在案例执行结果中写入成功,否则写入失败。

每一行的数据都不一样,可实现循环调用

# !/usr/bin/env python

# -*- coding:utf-8 -*-

#import xlwt #这个专门用于写入excel的库没有用到

import xlrd

from xlutils.copy import copy

import requests

import json

old_excel = xlrd.open_workbook('excel.xls')

sheet = old_excel.sheets()[0]

url = 'http://10.1.1.32:1380/service/allocFk2'

headers = {'Content-Type': 'application/json'}

i = 0

new_excel = copy(old_excel)

for row in sheet.get_rows():

data = row[0].value

response = requests.post(url=url, headers=headers, data=data)

text = response.text

#使用json.loads可以把Unicode类型,即json类型转换成dict类型

text = json.loads(text)["returnMsg"] #屏蔽这行代码即可把返回的完整数据写入文件中

ws = new_excel.get_sheet(0)

ws.write(i,1,text)

new_excel.save('excel.xls')

old_excel = xlrd.open_workbook('excel.xls')

new_excel = copy(old_excel)

i = i+1

执行前的excel格式:

发送报文

返回报文

校验字符

案例执行结果

{ "projectId" :"0070", "projectAllocBatch" :"1", "serviceCode" :"GT012", "seqNo" :"180800272201GT51286712", "tranTimeStamp" :"20180817102244", "sign" :"2dbb89a6bd86b2af1ff6a76c35c05284" }

交易失败

{ "projectId" :"0070", "projectAllocBatch" :"1", "serviceCode" :"GT012", "seqNo" :"180800272201GT51286713", "tranTimeStamp" :"20180817102244", "sign" :"2dbb89a6bd86b2af1ff6a76c35c05284" }

交易失败

{ "projectId" :"0070", "projectAllocBatch" :"1", "serviceCode" :"GT012", "seqNo" :"180800272201GT51286713", "tranTimeStamp" :"20180817102244", "sign" :"2dbb89a6bd86b2af1ff6a76c35c05284" }

交易成功

执行后的结果:

调试过程中遇到的问题:

1、一开始在for循环的最后没有增加这两行代码

old_excel = xlrd.open_workbook('excel.xls')

new_excel = copy(old_excel)

这样的话new_excel永远都是一开始获取到的那一个,只会把最后一个循环返回的结果写入文件,因为之前的全部都被一开始获取的那个old_excel给覆盖了,所以每次执行完写入操作以后都要重新做一次copy操作,这样就能保证new_excel是最新的。

2、注意执行程序之前要把excel关闭,否则会报错

以上这篇解决使用Pandas 读取超过65536行的Excel文件问题就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。

本文标题: 解决使用Pandas 读取超过65536行的Excel文件问题

本文地址: http://www.cppcns.com/jiaoben/python/363128.html

python求excel的最大行_解决使用Pandas 读取超过65536行的Excel文件问题相关推荐

  1. python xlwt写入excel_python xlwt模块写入excel超过65536行报错问题解决方法

    上篇文章中将内容写到excel中使用import xlwt包,后来发现文件写入超过65536行的时候就会报错,无法转换成功, xls后缀文件,只支持这么多行,在网上搜索一下,解决方法可以写多个shee ...

  2. python将txt文件转为excel格式以及写入excel超过65536行报错问题解决方法

    参考链接: https://blog.csdn.net/levy_cui/article/details/82252183 https://blog.csdn.net/levy_cui/article ...

  3. python创建表格怎么只能65536_python写入excel超过65536行报错问题解决方法

    接此篇文章:python将txt文件转为excel格式 上篇文章中将内容写到excel中使用import xlwt包,后来发现文件写入超过65536行的时候就会报错,无法转换成功, xls后缀文件,只 ...

  4. 超过65536行的数据导入Vfp9、导出至Excel

    一.VFP9(Microsoft Visual FoxPro9)支持的excel版本简介 通过VFP9 软件的导入.导出窗口可以看到,该软件最多支持到Microsoft Excel 5.0;换言之,V ...

  5. java poi 导出excel不能超过65536行

    java poi 导出excel不能超过65536行 报这个异常 Exception in thread "main" java.lang.IllegalArgumentExcep ...

  6. axure中怎么做出固定首行_办公软件操作技巧078:如何在excel表格中冻结行与列...

    在日常工作中,有时我们编辑的excel表格会比较大,数据内容有很多行和列,当我们拖动滚动条找到了离表头比较远的数据行或列的内容时,又看不到行或列表头标题信息了,这时再去处理数据信息就会感觉很不方便,如 ...

  7. python无法在终端运行程序_解决项目pycharm能运行,在终端却无法运行的问题

    解决项目pycharm能运行,在终端却无法运行的问题 报 ModuleNotFoundError: No module named '****' 错误. 运行的文件夹又不在根目录下, 在python ...

  8. excel自动调整列宽_办公软件操作技巧012:如何调整excel表格的行高与列宽

    在日常工作中,我们经常会使用excel编辑电子表格,但有时默认的行高与列宽与单元格内数据内容的高度和长度会不太匹配,如下图,这时就需要调整表格的行高和列宽,那么今天就来和大家分享几种调整excel表格 ...

  9. pandas写入excel指定行_如何使用 Pandas 从excel文件读取特定行_pandas_酷徒编程知识库...

    我有一个excel文件,需要从某个工作表的行中提取某些数据.import pandas as pd xl_file = pd.ExcelFile((xlfilePath) dfs = {sheet_n ...

  10. 用于python环境下的数据操作_数据分析(一):环境搭建,以及初步操作文件

    1.准备工作 ①定义:用适当的统计分析方法对收集来的大量数据进行分析,提取有用信息和形成结论,对数据加以详细研究和概括总结的过程 ②环境部署,可以再pycharm中做也可以再jupyter中做 ③ju ...

最新文章

  1. 听说,这是时下最恐怖的出游邀请
  2. 计算机怎样选定硬盘,如何给电脑分盘
  3. 当公司辞掉85后测试员选择95后测试员后...
  4. C# RSA和Java RSA互通
  5. MarkDown编辑器实用语法、数学公式汇总
  6. HackerRank - Stock Maximize
  7. iOS 实现Lottie动画
  8. Google浏览器删除的书签怎么恢复?
  9. Echarts formatter综合写法
  10. 怎么禁用计算机usb驱动程序,win7如何禁止USB自动安装驱动程序
  11. [課程筆記] 機器學習2021(李弘毅) L13. Transformer (下)
  12. 片上总线学习之Wishbone
  13. 【回忆杀】程序员书房翻杂物,看到初恋的信件,看到奖牌,看到梅西、力宏,他的眼角又湿了.....
  14. ptx760功能图解_摩托罗拉ptx760写频软件
  15. 国内首个写作机器人上岗,1秒完成文章写作,就问你怕不怕!
  16. vite的public目录
  17. MUR2060AC-ASEMI超快恢复二极管MUR2060AC
  18. 骚年,来填坑了!!!
  19. 人工智能阿凡达平台发布,全力拥抱“元宇宙”
  20. 创业点滴:一个小老板的日常管理

热门文章

  1. 树莓派Python3 使用定时器
  2. 【java】PageHelper.startPage
  3. Ci522 13.56MHz非接触式读写器芯片--Si522 Lowcost版本
  4. 到底买苹果XS还是XR_iPhone XS和iPhone XR买哪个好?苹果XR和XS区别对比测评
  5. FDD与TDD工作原理
  6. 企业微信机器人定时发送信息
  7. java读取json文件
  8. 电脑录制网课视频怎么操作?
  9. 计算机学院部长换届答辩,未来可期,各自精彩——记计算机科学学院2020年两委换届竞职答辩活动...
  10. 证件照处理技术的应用