中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

Pandas如何實現取超大的Excel文件

發布時間:2020-11-11 15:24:18 來源:億速云 閱讀:1902 作者:Leah 欄目:開發技術

這篇文章給大家介紹Pandas如何實現取超大的Excel文件,內容非常詳細,感興趣的小伙伴們可以參考借鑒,希望對大家能有所幫助。

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" }交易成功

執行后的結果:

Pandas如何實現取超大的Excel文件

調試過程中遇到的問題:

1、一開始在for循環的最后沒有增加這兩行代碼

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

new_excel = copy(old_excel)

這樣的話new_excel永遠都是一開始獲取到的那一個,只會把最后一個循環返回的結果寫入文件,因為之前的全部都被一開始獲取的那個old_excel給覆蓋了,所以每次執行完寫入操作以后都要重新做一次copy操作,這樣就能保證new_excel是最新的。

2、注意執行程序之前要把excel關閉,否則會報錯

關于Pandas如何實現取超大的Excel文件就分享到這里了,希望以上內容可以對大家有一定的幫助,可以學到更多知識。如果覺得文章不錯,可以把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

偏关县| 柯坪县| 航空| 徐闻县| 田林县| 静乐县| 余江县| 衡南县| 衡阳县| 平远县| 襄樊市| 明溪县| 秦皇岛市| 张家口市| 万荣县| 密山市| 科技| 内黄县| 东乡县| 鄯善县| 南丹县| 延吉市| 汤原县| 阿合奇县| 潜江市| 张掖市| 耿马| 丽水市| 广南县| 卓资县| 宁德市| 江城| 尼木县| 天峻县| 南和县| 鄂尔多斯市| 徐闻县| 微山县| 濮阳县| 海门市| 孙吴县|