场景

今天需要合并天猫订单数据,由于前期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. html5做文字颜色渐变代码,神奇!js+CSS+DIV实现文字颜色渐变效果_javascript技巧
  2. java mongodb 批量删除_MONGODB删除/新增/更改大量记录的方法
  3. mysql max字符串数值_针对字符串值的mysql:min()和max()。
  4. 用emacs做笔记_3种用于记笔记的Emacs模式
  5. matlab标定工具箱 参数,使用MATLAB标定工具箱求出内外参数后怎样求实物的两点间......
  6. Sublime Text 3 添加当前时间的制作方法
  7. FZOJ2110: Star
  8. MySQL SYS CPU高的案例分析(一)
  9. Deming质量管理14点
  10. ubuntu linux u盘安装教程,U盘安装ubuntu的详细教程
  11. 【环境配置】Visual Studio opencv配置
  12. VMware ESXi 6.5之前 缺少驱动处理方式
  13. spring boot + Spring Security 入门
  14. 什么电子邮箱最安全,什么邮箱更具私密性?
  15. AAAI2020论文列表(中英对照)
  16. 嵌入式技术可以做哪些产品
  17. python画史迪仔_手把手教你如何使用Python来生成马赛克画!
  18. 区块链金融中的python应用--LSM定价
  19. IEEE trans模板格式中的分栏及左下角作者信息脚注的添加方法(Word 2010)
  20. webpack构建中tree shaking、scope Hoisting(面试题)

热门文章

  1. 舞蹈课(2020NOIP)
  2. mysql怎么在查询_Mysql查询操作
  3. 【微积分】2.1一元函数微分
  4. python两个csv表数据合并_python 如何把两个表格数据,合并为一个呢?
  5. 专业计算机怎么关机,Win10如何使用快捷键来关机?_win10专业版技巧
  6. 朱利亚 matlab分形图,【分形之美 02】分形图像怎么画?详解曼德勃罗朱利亚分形绘制方法...
  7. VPX SRIO交换板VPX3U-1Swit-CPS1848
  8. 版式设计怎么做对比?有哪些形式!
  9. 【ES实战】_forcemerge API 使用说明
  10. 从一个骗人的技术说起光线追踪——光影技术的里程碑