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文件的读取问题
本文地址:http://www.cppcns.com/jiaoben/python/363128.html
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。