热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

pandas获取excel行数,python统计excel数据总行数

pandas获取excel行数,python统计excel数据总行数事件今天,我们需

  pandas获取excel行数,python统计excel数据总行数

  事件

  今天,我们需要合并天猫的订单数据。因为之前的6.18活动有很多数据要处理,所以我们把几个月合并在一起,结果报错了。

  问题分析

  Excel文件的格式已经更改过一次。在Excel 2007之前,扩展名为。使用xls格式。这种文件格式是一种特定的二进制格式,最多可支持65,536行和256列。从2007版Excel开始,新的文件格式。默认采用基于XML的xlsx,支持的表数达到1048576,列数达到16384。应该注意的是,当文件在。xlsx格式转换为中的文件。xls格式,65536行和256列之后的数据将被丢弃。

  熊猫读取Excel文件的引擎是xlrd。虽然xlrd两者都支持。xlsx和。xls文件格式,在源文件xlrd/sheet.py中限制读取的Excel文件的行数和列数必须分别小于65536和256。

  如果self.biff_version=80:

  self.utter_max_rows=65536

  否则:

  self.utter_max_rows=16384

  self.utter_max_cols=256

  因此,即使它是。xlsx格式,xlrd仍然不支持读取超过65536行的Excel文件(源代码中也有16384行的限制,这是因为在Excel 95时代,xls文件支持的最大行数是16384行)。

  解决办法

  Openpyxl是一个Python库,专门用于在。xlsx格式。与xlrd相比,它对最大行数和列数的支持与。xlsx文件。

  首先安装openpyxl:

  pip安装openpyxl

  熊猫的read_Excel方法中,有一个引擎字段,可以指定用来处理Excel文件的引擎,填写openpyxl,然后读取文件。

  导入操作系统

  进口熊猫作为pd

  #读出文件并将其放入列表中

  Pwd=1 #获取文件目录

  #创建一个新列表来存储文件名。

  file_list=[]

  #创建一个新的列表来存储每个文件的数据(依次读取几个结构相同的Excel文件,创建一个DataFrame)

  dfs=[]

  对于os.walk (PWD)中的root、dirs、files:#第一个是起始路径,第二个是起始路径下的文件夹,第三个是起始路径下的文件。

  对于文件中的文件:

  file_path=os.path.join(根,文件)

  File_list.append(file_path) #使用os.path.join(dirpath,name)获取完整路径

  Df=pd.read_excel(file_path) #导入xlsx文件并将excel转换为DataFrame

  附加(df)

  #将多个数据帧合并成一个

  df=pd.concat(dfs)

  #数据输出,写入excel文件,无索引数据

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

  Df.to _ Excel (test \ \ 1.xlsx ,index=False,engine= openpyxl) #导出Excel,一般不带index,并将index参数设置为False。

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

  实施功能:

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

  每一行的数据都不一样,可以循环调用。

  # !/usr/lively酸奶/env python

  # -*-编码:utf-8 -*-

  #import xlwt #不使用这个专门写excel的库。

  导入xlrd

  从xlutils.copy导入副本

  导入请求

  导入json

  old _ excel=xlrd . open _ workbook( excel . xls )

  sheet=old_excel.sheets()[0]

  URL= http://10 . 1 . 1 . 32:1380/service/allocf k2

  headers={ Content-Type : application/JSON }

  i=0

  new_excel=copy(old_excel)

  对于sheet.get_rows()中的行:

  数据=行[0]。价值

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

  文本=响应.文本

  #使用json.loads将Unicode类型,即json类型转换为dict类型。

  text=JSON . loads(text)[ return msg ]#阻塞这行代码,将返回的完整数据写入文件。

  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 : 2 dbb 89 a6 BD 86 B2 af 1 ff 6a 76 c 35 c 05284 }

  交易失败

  { projectId :0070 , projectAllocBatch :1 , serviceCode :GT012 , seqNo :180800272201GT51286713 , tranTimeStamp :20180817102244 , sign : 2 dbb 89 a6 BD 86 B2 af 1 ff 6a 76 c 35 c 05284 }

  交易失败

  { projectId :0070 , projectAllocBatch :1 , serviceCode :GT012 , seqNo :180800272201GT51286713 , tranTimeStamp :20180817102244 , sign : 2 dbb 89 a6 BD 86 B2 af 1 ff 6a 76 c 35 c 05284 }

  交易成功

  执行后的结果:

  调试期间遇到的问题:

  1.在开始的时候,这两行代码并没有加在for循环的末尾。

  old _ excel=xlrd . open _ workbook( excel . xls )

  new_excel=copy(old_excel)

  这样new_excel就永远是最开始获取的那个,只有最后一次循环返回的结果才会写入文件。因为之前的都被当初获取的old_excel覆盖了,所以每次写操作之后你都要再做一次复制操作,这样才能保证new_excel是最新的。

  2.执行程序前注意关闭excel,否则会报错。

  以上关于使用熊猫阅读65536行以上Excel文件问题的解决方案,就是边肖分享的全部内容。希望能给大家一个参考,多多支持我们。

  标题:用熊猫解决65536行以上Excel文件的读取问题

  



推荐阅读
author-avatar
别说没用的妇
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有